Docker容器从不同的子网开始

我必须启动3个容器,nginx,wordpress和wordpress2。 问题是nginx容器从172.17.0.2开始,wordpress在172.18.0.3和wordpress2在172.19.0.4。 WordPress的容器开始与他们的docker-compose.ymlconfiguration为我显示:

对于wordpress:

version: '2' services: db: image: mysql:5.7 volumes: - "./.data/db:/var/lib/mysql" restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest links: - db ports: - "8000:80" networks: - ipv4_address: 172.17.0.5 restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress 

对于wordpress2:

 version: '2' services: db: image: mysql:5.7 volumes: - "./.data/db:/var/lib/mysql" restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest links: - db ports: - "8001:80" networks: - ipv4_address: 172.17.0.6 restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress 

正如你所看到的,我把在networking领域ipv4_address,但是当我启动docker-compose.yml它显示在这一行的错误。 我认为,默认情况下,所有容器通常在同一个networking上,但在这种情况下不会。 你能帮我把所有的容器放在同一个子网吗?

每个docker-compose.yml将创build它自己的子网。 所以你的3个容器看不到对方 由其他docker组成的networking被认为是外部的,所以你必须这样声明它们。 您可以使用docker network ls来查看这些networking。

在docker-compose.yml文件中声明外部networking中的外部networking之后,您将必须定义nginx服务应该使用哪些networking。 你应该保持defaultnetworking。

通常,docker-composenetworking的默认名称是<current_dir>_default 。 所以假设你的当前目录名为yourproject1 ,networking名称将是yourproject1_default

然后,你将能够访问你的wordpress容器使用external_links (比IP地址更好的国际海事组织)

在这里,我会为nginx的docker-compose.yml文件做些什么,使他能够看到wordpress容器:

 version: '2' services: nginx: ... external_links: - your_project1_wordpress1_1:wordpress1 - your_other_project2_wordpress2_1:wordpress2 networks: - default - your_project1_default - your_other_project2_defaul networks: your_project1_default: external: true your_other_project2_default: external: true