#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:
Я думаю, у вас возникли проблемы со связыванием контейнеров. Я предлагаю вам использовать пользовательскую сеть вместо связывания. Чтобы все контейнеры могли видеть друг друга