我使用docker-compose(php:7.2.20-apache)创建了以下容器:
version: "3"
services
php72:
build:
context: .
ports:
- 80:80
volumes:
- ./www:/var/www/html
我用docker run创建了以下容器:
docker run --name mysql5 -p 3306:3306 -v mysql5-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.27
我可以使用MySQL Workbench连接到mysql,但是第一个容器(使用docker-compose创建的php7)中的应用程序无法使用相同的连接凭据连接到数据库。
如何解决这个问题?
PS:这是对MacO中开发环境的测试
答案 0 :(得分:1)
您可以管理一个用户定义的网桥,使他们彼此通信,请参见this,详细信息如下:
1。创建用户定义的网桥
$ docker network create my-net
2。将mysql容器链接到该网络
$ docker run --name mysql5 -p 3306:3306 -v mysql5-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.27
$ docker network connect my-net mysql5
3。配置docker-compose
以使用网络
version: "3"
services
php72:
build:
context: .
ports:
- 80:80
volumes:
- ./www:/var/www/html
networks:
default:
external:
name: my-net
然后,从this:
用户定义的网桥可在容器之间提供自动DNS解析。
您可以使用服务名称或容器名称互相访问。
答案 1 :(得分:0)
首先,请确保您在数据库数据库中使用的是php:7.2.20-apache容器中正确的地址,因为您的MySQL Workbench最有可能使用与php:7.2.20-apache容器不同的IP地址(例如127.0.0.1) (例如172.19.0.1)
通过列出您的网络来确保容器在同一网络上
docker network ls
如果不是,请使用
将它们连接到同一个docker network connect
用法:docker网络连接[选项]网络容器 (有关更多信息,请参见“ docker network connect --help”。)
您可以通过命令
获得有关每个网络的更多信息。docker network inspect
用法:docker网络检查[选项]网络[网络...]