我正在使用以下Docker配置:https://github.com/romaricp/kit-starter-symfony-4-docker
我通过以下方式启动环境:
docker-compose build
其次:
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 [系统] [MY-010931] [服务器] / usr / sbin / mysqld:准备连接。版本:“ 8.0.15”套接字:“ / var / run / mysqld / mysqld.sock”端口:3306 MySQL社区服务器-GPL。
也许端口错误,这就是为什么我无法连接?
答案 0 :(得分: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的连接器存在问题),更多详细信息here
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 < / strong>
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 :(得分:0)
您必须公开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
答案 2 :(得分:0)
我认为您在链接容器时遇到问题。我建议您使用Coustom网络而不是链接。所有容器都能看到对方