首页 > 解决方案 > 将使用 docker-compose 创建的容器连接到使用 docker run 创建的另一个容器

问题描述

我使用 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:这是对 MacOs 开发环境的测试

标签: phpmysqldockerdocker-compose

解决方案


您可以为他们管理一个用户定义的桥接器以相互通信,请参见下面详细信息:

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

然后,从此

用户定义的网桥提供容器之间的自动 DNS 解析。

您可以使用服务名称或容器名称相互访问。


推荐阅读