[英]Docker can't connect to MySQL running docker-compose up
I am using this Docker config: https://github.com/romaricp/kit-starter-symfony-4-docker我正在使用这个 Docker 配置: https : //github.com/romaricp/kit-starter-symfony-4-docker
I start the environment by using:我使用以下方法启动环境:
docker-compose build
docker-compose 构建
followed by:其次是:
docker-compose up -d
docker-compose up -d
Everything is running fine but there is a problem with MySQL service.一切正常,但 MySQL 服务出现问题。 I get an Symfony error:
我收到一个 Symfony 错误:
"An exception occurred in driver: could not find driver"
“驱动程序发生异常:找不到驱动程序”
as well as PMA error when I try to login to DB:以及当我尝试登录数据库时的 PMA 错误:
mysqli_real_connect(): php_network_getaddresses: getaddrinfo failed: Name does not resolve
mysqli_real_connect(): php_network_getaddresses: getaddrinfo 失败: 名称无法解析
Any idea how could I make it work?知道我怎么能让它工作吗?
docker-compose.yml: 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
Also I opened the mysql logs and I see this:我也打开了 mysql 日志,我看到了这个:
2019-04-07T12:00:30.943414Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections.
2019-04-07T12:00:30.943414Z 0 [系统] [MY-010931] [服务器] /usr/sbin/mysqld:准备好连接。 Version: '8.0.15' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
版本:'8.0.15' 套接字:'/var/run/mysqld/mysqld.sock' 端口:3306 MySQL 社区服务器 - GPL。
Maybe the port is wrong and that's why I can't connect?也许端口错误,这就是我无法连接的原因?
I think you're having trouble linking the containers.我认为您在链接容器时遇到了问题。 I suggest that you use a custom network instead of linking.
我建议您使用自定义网络而不是链接。 That all containers can see each other
所有容器都可以看到彼此
For phpmyadmin
service, i think you should set the PMA_HOST
and PMA_PORT
environment variables like this:对于
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
Your mysql container should have the command
instruction at the start to set the authentication plugin (there is an issue with the connectors with mysql 8), more details here你的 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
in your Symfony app, the connection string is located in .env
file, and it should have the following format :在你的 Symfony 应用程序中,连接字符串位于
.env
文件中,它应该具有以下格式:
DATABASE_URL=mysql:// mysql_user : mysql_user_password @ mysql_host : mysql_port / db_name
DATABASE_URL=mysql:// mysql_user : mysql_user_password @ mysql_host : mysql_port / db_name
mysql_user : your mysql user (ex: root)
mysql_user :您的 mysql 用户(例如:root)
mysql_user_password : the user's password (ex: root)
mysql_user_password :用户的密码(例如:root)
mysql_host : is should contain your mysql container service name located in your
docker-compose.yml
file (mysql in this case)mysql_host :应包含位于
docker-compose.yml
文件中的 mysql 容器服务名称(本例中为 mysql)mysql_port : mysql container internal port (3306, in this case)
mysql_port : mysql 容器内部端口(本例中为 3306)
db_name : the database you want to connect to.
db_name :要连接的数据库。
the DATABASE_URL can look like this : DATABASE_URL 可以是这样的:
DATABASE_URL=mysql://root:root@mysql:3306/sf4
stop your containers after these changes and start them up again.在这些更改后停止您的容器并再次启动它们。
Hope this will help.希望这会有所帮助。
You have to expose the mysql port 3306:您必须公开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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.