Docker не может подключиться к MySQL под управлением docker-compose up

#mysql #docker

#mysql #docker

Вопрос:

Я использую эту конфигурацию Docker:https://github.com/romaricp/kit-starter-symfony-4-docker

Я запускаю среду с помощью:

сборка docker-compose

за которым следует:

docker-compose up -d

Все работает нормально, но есть проблема с сервисом MySQL. Я получаю ошибку Symfony:

«В драйвере возникло исключение: не удалось найти драйвер»

а также ошибка PMA при попытке входа в БД:

mysqli_real_connect(): php_network_getaddresses: ошибка getaddrinfo: имя не разрешается

Есть идеи, как я мог бы заставить это работать?

docker-compose.yml:

 version: '3'
services:
apache:
    build: .docker/apache
    container_name: sf4_apache
    ports:
      - 80:80
    volumes:
      - .docker/config/vhosts:/etc/apache2/sites-enabled
      - .:/home/wwwroot/sf4
    depends_on:
      - php

mysql:
    image: mysql
    container_name: sf4_mysql
    volumes:
        - .docker/data/db:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: sf4
        MYSQL_USER: sf4
        MYSQL_PASSWORD: sf4

php:
    build: .docker/php
    container_name: sf4_php
    volumes:
      - .:/home/wwwroot/sf4
    environment:
      - maildev_host=sf4_maildev
    depends_on:
      - maildev
      - mysql

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: sf4_phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql

maildev:
    image: djfarrelly/maildev
    container_name: sf4_maildev
    ports:
      - 8001:80
  

Также я открыл журналы mysql и вижу это:

2019-04-07T12:00:30.943414Z 0 [System] [MY-010931] [Server] /usr / sbin/mysqld: готов к подключениям. Версия: ‘8.0.15’ сокет: ‘/var/run/mysqld/mysqld.sock’ порт: 3306 Сервер сообщества MySQL — GPL.

Может быть, порт неправильный, и именно поэтому я не могу подключиться?

Ответ №1:

Для phpmyadmin службы, я думаю, вам следует установить переменные среды PMA_HOST и PMA_PORT следующим образом:

 phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: sf4_phpmyadmin
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
    ports:
        - 8080:80
    links:
        - mysql
  

В вашем контейнере mysql должна быть command инструкция в начале для установки плагина аутентификации (есть проблема с соединителями в mysql 8), более подробная информация здесь

 mysql:
    image: mysql
    container_name: sf4_mysql
    command: "--default-authentication-plugin=mysql_native_password"
    volumes:
        - .docker/data/db:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: sf4
        MYSQL_USER: sf4
        MYSQL_PASSWORD: sf4
  

в вашем приложении Symfony строка подключения находится в .env файле и должна иметь следующий формат :

DATABASE_URL=mysql://mysql_user:пароль mysql_user_password@mysql_host:mysql_port/db_name

mysql_user: ваш пользователь mysql (например, root)

mysql_user_password: пароль пользователя (например, root)

mysql_host: должен содержать имя вашей контейнерной службы mysql, расположенной в вашем docker-compose.yml файле (в данном случае mysql)

mysql_port: внутренний порт контейнера mysql (в данном случае 3306)

db_name: база данных, к которой вы хотите подключиться.

DATABASE_URL может выглядеть следующим образом :

 DATABASE_URL=mysql://root:root@mysql:3306/sf4
  

остановите свои контейнеры после этих изменений и запустите их снова.

Надеюсь, это поможет.

Комментарии:

1. Попробовал ваши настройки, таким образом, я получаю запрошенный сервером метод аутентификации, неизвестный клиенту [caching_sha2_password] ошибка.

2. При попытке входа в PMA. Кроме того, Symfony также не может получить доступ к БД. Я изменил учетные данные базы данных .env на DATABASE_URL=mysql://sf4:root@mysql:3306/sf4

3. Те же ошибки. Также мои учетные данные для входа должны быть sf4 / root, если я прав. На основе параметров среды Docker.

4. эта строка отсутствует в вашем docker-compose.yml (сервис mysql) command: "--default-authentication-plugin=mysql_native_password"

5. То же самое, я запустил docker-compose down и docker-compose up -d после его изменения, и ошибка такая же.

Ответ №2:

Вы должны предоставить порт mysql 3306:

   mysql:
    image: mysql
    container_name: sf4_mysql
    volumes:
    - .docker/data/db:/var/lib/mysql
    restart: always
    ports:
    - "3306:3306"
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: sf4
        MYSQL_USER: sf4
        MYSQL_PASSWORD: sf4
    networks:
    - default
  

Комментарии:

1. Таким образом, я получаю сообщение об ошибке: {«сообщение»: «сбой драйвера при программировании внешнего подключения на конечной точке sf4_mysql (4c503802716b745c597590bf6a5b251b6d3b24c31ddd2618b3f8b380ac677442): сбой привязки для 0.0.0.0: 3306: порт уже выделен»}

2. Ваш 3306 уже используется другой службой на вашем хост-компьютере, попробуйте "3307:3306" или оставьте как есть и остановите службу mysql на вашем хост-компьютере.

3. попробуйте: docker-compose down amp; docker-compose up -d Дополнительная информация: github.com/docker/compose/issues/4950 об этой проблеме.

4. Попытался перезапустить его, ничего не изменилось, также изменил порт для mysql в Docker на 3307: 3306, и ничего не изменилось.

5. Хорошая идея @AbdelkarimELAMEL. Остановите другие mysql-сервисы 😉

Ответ №3:

Я думаю, у вас возникли проблемы со связыванием контейнеров. Я предлагаю вам использовать пользовательскую сеть вместо связывания. Чтобы все контейнеры могли видеть друг друга