Как получить доступ к административной панели в Docker?

С использованием следующих конфигураций:

<pre><code class="yaml">version: '3.2'

networks:
  project:

services:
  nginx:
    container_name: project_nginx
    image: nginx:1.18.0
    ports:
      - 80:80
    volumes:
      - ./:/var/www/project
      - ./docker/nginx/api.project.local.conf:/etc/nginx/conf.d/api.project.local.conf
      - ./docker/nginx/b.project.local.conf:/etc/nginx/conf.d/b.project.local.conf
      - ./docker/nginx/lk.project.local.conf:/etc/nginx/conf.d/lk.project.local.conf
    networks:
      - project
    depends_on:
      - php
  php:
    container_name: project_php
    build: /docker/php8.1-fpm
    volumes:
      - ./:/var/www/project
      - ./docker/php.ini:/usr/local/etc/php/conf.d/php.ini
    networks:
      - project
    depends_on:
      - db
  db:
    container_name: project_db
    restart: always
    image: mariadb:10.1
    command: ["--default-authentication-plugin=mysql_native_password"]
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
      MYSQL_DATABASE: project
      MYSQL_USER: your_mysql_user
      MYSQL_PASSWORD: your_mysql_password
    networks:
        - project
  adminer:
    image: adminer
    container_name: project_adminer
    restart: always
    depends_on:
      - db
    ports:
      - 8088:8080</code></pre>

Я сталкиваюсь с ошибкой <b>php_network_getaddresses: getaddrinfo failed: Name or service not known</b> при попытке доступа к Adminer. Как можно решить эту проблему?
  • 6 октября 2024 г. 14:04
Ответы на вопрос 2
Ошибки типа `php_network_getaddresses: getaddrinfo failed: Name or service not known` чаще всего возникают в случае неправильной настройки подключения к базе данных. В вашем случае, это может быть связано с конфигурацией Adminer, когда он не может решить имя сервиса базы данных.

### Решение:

1. **Проверка имени хоста**: Убедитесь, что вы используете правильный хост для подключения к контейнеру базы данных. В конфигурации Docker Compose имя контейнера базы данных - `project_db`, и это имя следует использовать при подключении:

    - Когда вы открываете Adminer в браузере (по адресу http://localhost:8088), вам нужно будет ввести следующие данные для подключения:
        - **System**: MySQL
        - **Server**: `project_db`
        - **Username**: `your_mysql_user`
        - **Password**: `your_mysql_password`
        - **Database**: `project`
    
2. **Перезапуск сервисов**: Если вы внесли изменения в `docker-compose.yml`, убедитесь, что ваши контейнеры перезапущены, чтобы изменения вступили в силу. Вы можете выполнить следующие команды:

    ```bash
    docker-compose down
    docker-compose up -d
    ```

3. **Проверка сети**: Убедитесь, что все контейнеры находятся в одной сети (в вашем случае, это сеть `project`). Вы правильно настроили сеть, так что это не должно быть проблемой.

4. **Логи контейнеров**: Если ошибка сохраняется, проверьте логи контейнеров, чтобы получить более подробную информацию о проблеме:

    ```bash
    docker logs project_adminer
    docker logs project_db
    ```

5. **Попробуйте использовать IP-адрес**: Если проблема продолжает существовать, можно попытаться использовать IP-адрес контейнера базы данных вместо имени. Вы можете узнать IP-адрес контейнера, используя:

    ```bash
    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' project_db
    ```

   Затем попробуйте подключиться к этому IP-адресу в Adminer.

### Пример подключения в Adminer:
- **System**: MySQL
- **Server**: `project_db` (или IP-адрес контейнера)
- **Username**: `your_mysql_user`
- **Password**: `your_mysql_password`
- **Database**: `project`

### Заключение
Если вы выполните эти шаги, ошибка `php_network_getaddresses: getaddrinfo failed` должна исчезнуть, и вы сможете успешно подключиться к базе данных через Adminer. Если возникнут дополнительные проблемы, предоставьте больше информации о конфигурации и логах.
adminer стоит поместить в ту же сеть что и остальные контейнеры. 
networks:
        - project
Похожие вопросы