带有docker-composport的MySQL不适用于网络



我不确定这是一个bug还是一个特性。但几个月来,我一直在为我的本地开发数据库运行这个docker compose设置,自从我更新了docker和Lando后,它就停止了工作。

正如你所看到的,我将它用于一些用Lando管理的php网站。自从上次更新以来,portsnetwork指令在MySQL容器上不起作用。

  • 如果将其与下面的代码段一起使用,则ports指令不起作用。这意味着我不能从localhost:3306上的QueryPie连接,但可以从另一个以mysql_db为主机的lando-docker容器连接
  • 如果我注释掉networks指令,则ports指令为工作但networks指令显然不是。这意味着我可以从localhost:3306上的QueryPie连接,但我不能从另一个以mysql_db为主机的lando-docker容器连接

在更新之前,他们合作得很好。所以我可以在QueryPie中打开MySQL,并从Lando容器访问数据库。

version: '3'
services:
mysql:
container_name: mysql_db
restart: always
image: mysql:latest
ports: 
- "3306:3306" 
environment:
- MYSQL_ROOT_PASSWORD=secret
volumes:
- ./mysql-data:/var/lib/mysql
networks:
- lando_bridge_network
networks:
lando_bridge_network:
external: true

我的docker引擎是19.03.8,我的dockercompose版本是1.25.5。

因此,我通过删除networks指令并仅使用ports公开端口3306来解决此问题。运行在lando/docker I上的PHP站点要连接的内部docker IP:

define('DB_HOST', 'host.docker.internal');

在QueryPie(在主机上运行(中,我可以连接localhost:3306

version: '3'
services:
mysql:
container_name: mysql_db
restart: always
image: mysql:latest
ports: 
- "3306:3306" 
environment:
- MYSQL_ROOT_PASSWORD=secret
volumes:
- ./mysql-data:/var/lib/mysql

最新更新