将使用docker-compose创建的容器连接到使用docker run创建的另一个容器

时间:2019-08-13 01:25:27

标签: php mysql docker docker-compose

我使用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中开发环境的测试

2 个答案:

答案 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网络检查[选项]网络[网络...]