使用 docker 部署连接 mysql 问题

2019-09-23 15:30:37 +08:00
 su2018

docker-compose.yml 如图所示

然后在 php 代码中连接数据库时总是连接不上, 但是使用 Navicat 采用 127.0.0.1 或者是 localhost 都可以连接得上

测试代码:

求大神详解

4703 次点击
所在节点    Docker
18 条回复
czzhengkw
2019-09-23 15:56:31 +08:00
$servername = "mysql"

docker-compose 自己内部有一套网络,会把 service name 转换为对应的 ip
su2018
2019-09-23 16:13:29 +08:00
@czzhengkw 也是不行

Connection failed: php_network_getaddresses: getaddrinfo failed: Name or service not knownPHP Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/project/test2.php on line 18
PHP Warning: mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/project/test2.php on line 18
ysoserious
2019-09-23 16:20:02 +08:00
你把代码里的端口改成 3306 试试?
cwz88
2019-09-23 16:20:59 +08:00
docker-compose.yml 中
```
php:
image: "php7.2:v2"
links:
- "mysql"
```
php 代码中 $servername = "mysql"
就 ok 了
wszgrcy
2019-09-23 16:21:31 +08:00
回去帮你看看,之前也配置过
maichael
2019-09-23 16:32:10 +08:00
没记错的话,service 和 service 通信用的是 container port,所以应该连 3306 吧
lxy42
2019-09-23 16:45:21 +08:00
networks 不要用 default,default 不支持 dns。
clives
2019-09-23 16:58:10 +08:00
networks 使用自定义~
sarices
2019-09-23 17:03:19 +08:00
你可以直接用 127.0.0.1 访问是因为 3306 帮到本地 ip 了,你的 php 容器并没有 3306 端口,在 php 中你可以用本机 ip 作为地址,也可以用 mysql 或者容器 ip 访问
su2018
2019-09-23 17:47:04 +08:00
@ysoserious
@cwz88
@maichael
经测试: yml 文件中 php: 改为--- links: "mysql" 而不是 depends_on 时采用 mysql:3306 可以连接到. 但是还是觉得这种连接方式有点奇怪, 为啥 Navicat 可以通过 127.0.0.1:3310 和 localhost:3310 连接
su2018
2019-09-23 17:54:08 +08:00
@sarices 哦哦 好像有点明白了, 你的意思是 mysql 容器的 3306 绑定了本机的 3310 所以通过 Navicat 时可以直接访问 3310 连接到 但是在 php 容器里 没有对应的 3310 绑定 mysql 容器的 3306 所以连接不上?
cwz88
2019-09-23 17:57:28 +08:00
跟 Navicat 没关系,只是 docker 外部可以用自定义的 3310,docker 内部要用 3306
XSG
2019-09-23 18:01:01 +08:00
3310 是宿主机端口,只能通过宿主机网络访问 mysql,你的 navicat 跑在宿主机上,当然可以访问
而 3306 是容器端口,上面有同学说过了,通过--links 方式访问,这是使用的容器网络,要和宿主机网络区分开
sarices
2019-09-23 18:03:44 +08:00
@su2018 就是这个意思
virus94
2019-09-23 18:12:49 +08:00
同遇到这个问题,不知道咋解决...
su2018
2019-09-24 09:11:02 +08:00
@virus94 嗯 我也折腾了好久 🤣
julyclyde
2019-09-24 16:15:55 +08:00
docker 发明了其它社会制度不存在的问题,并致力于解决它
asuraa
2021-11-11 13:50:45 +08:00
好像是因为 docker-compose 的版本 3 就会这样 改成 2 就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603375

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX