Docker can';t连接到运行docker compose的MySQL
我正在使用此Docker配置: 我使用以下方法启动环境: docker组合构建 其次是: docker compose up-d 一切正常,但MySQL服务存在问题。我得到一个Symfony错误: “驱动程序中发生异常:找不到驱动程序” 以及我尝试登录DB时的PMA错误: mysqli\u real\u connect():php\u network\u getaddresses:getaddrinfo失败: 名称无法解析 你知道我该怎么做吗 docker-compose.yml:Docker can';t连接到运行docker compose的MySQL,mysql,docker,Mysql,Docker,我正在使用此Docker配置: 我使用以下方法启动环境: docker组合构建 其次是: docker compose up-d 一切正常,但MySQL服务存在问题。我得到一个Symfony错误: “驱动程序中发生异常:找不到驱动程序” 以及我尝试登录DB时的PMA错误: mysqli\u real\u connect():php\u network\u getaddresses:getaddrinfo失败: 名称无法解析 你知道我该怎么做吗 docker-compose.yml: versio
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][Server]/usr/sbin/mysqld:准备好连接了。版本:“8.0.15”套接字:“/var/run/mysqld/mysqld.sock”端口:3306 MySQL社区服务器-GPL
可能端口错误,这就是我无法连接的原因 您必须公开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
我想你连集装箱都有问题。我建议您使用自定义网络而不是链接。对于
phpmyadmin
服务,所有容器都可以看到彼此,我认为您应该设置PMA\u主机
和PMA\u端口
这样的环境变量:
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: sf4_phpmyadmin
environment:
PMA_HOST: mysql
PMA_PORT: 3306
ports:
- 8080:80
links:
- mysql
mysql容器应该在开始时有命令
指令来设置身份验证插件(mysql 8的连接器有问题),更多详细信息
在Symfony应用程序中,连接字符串位于.env
文件中,其格式如下:
DATABASE\u URL=mysql://mysql\u用户:mysql\u用户密码mysql\u主机:mysql\u端口/db\u名称
mysql\u user:您的mysql用户(例如:root)
mysql\u user\u password:用户的密码(例如:root)
mysql\u主机:应该包含您的mysql容器服务名称
位于您的docker compose.yml
文件中(本例中为mysql)
mysql\u端口:mysql容器内部端口(本例中为3306)
db_name:要连接到的数据库
数据库URL可以如下所示:
DATABASE_URL=mysql://root:root@mysql:3306/sf4
在这些更改后停止容器并重新启动它们
希望这会有所帮助。这样我会得到一个错误:{“消息”:“驱动程序未能在端点sf4_mysql上编程外部连接(4C503802716B745C59590BF6A5B25B6D3B24C31DDD2618B3F8B380AC677442):绑定0.0.0:3306失败:端口已分配”}您的3306已被主机中的另一个服务使用,请尝试
“3307:3306”
,或者保持原样并停止主机中的mysql服务。尝试:docker compose down&docker compose up-d更多信息:关于此问题。尝试重新启动,未发生任何更改,也将docker上的mysql端口更改为3307:3306,未发生任何更改。好主意@Abdelkarimel。停止其他mysql服务;)尝试了您的设置,这样我在尝试登录到PMA时收到一个客户端未知的服务器请求的身份验证方法[caching_sha2_password]错误。另外,Symfony也无法联系数据库。我将.env数据库凭据更改为数据库\u URL=mysql://sf4:root@mysql:3306/SF4同样的错误。如果正确,我的登录凭据应该是sf4/root。基于Docker环境参数。Docker-compose.yml(mysql服务)命令中缺少这一行:“--default authentication plugin=mysql\u native\u password”
同样的事情,我在更改后运行Docker compose down和Docker compose up-d,错误相同。
DATABASE_URL=mysql://root:root@mysql:3306/sf4