【问题标题】:Docker containers starts at different subtnetsDocker 容器从不同的子网开始
【发布时间】:2016-10-22 09:33:39
【问题描述】:

我必须启动 3 个容器,nginx、wordpress 和 wordpress2。问题是 nginx 容器从 172.17.0.2 开始,wordpress 在 172.18.0.3 和 wordpress2 在 172.19.0.4。 wordpress 容器从配置的 docker-compose.yml 开始,如下所示:

对于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

如您所见,我将 ipv4_address 放在网络字段中,但是当我启动 docker-compose.yml 时,它在这一行显示错误。我认为默认情况下,所有容器通常都在同一个网络上,但在这种情况下不是。你能帮我把所有容器放在同一个子网吗?

【问题讨论】:

  • 如果所有 3 个容器都是同一个堆栈的一部分,您是否可以将它们全部放在同一个 docker-compose 文件中?如果可以的话,您可以使用 docker 的内置 dns 通过主机名访问容器,而不必关心特定的 IP 地址。

标签: wordpress networking nginx docker


【解决方案1】:

每个 docker-compose.yml 都会创建自己的子网。所以你的 3 个容器不能看到彼此。 由其他 docker-compose 创建的网络被称为 external,因此您必须这样声明它们。您可以使用docker network ls 查看这些网络。

在 docker-compose.yml 文件中的外部网络中声明外部网络后,您必须定义 nginx 服务应该使用哪些网络。您应该保留default 网络。

通常,您的 docker-compose 网络的默认名称是 <current_dir>_default。因此,假设您的当前目录名为 yourproject1,网络名称将是 yourproject1_default

然后您将能够使用 external_links 访问您的 wordpress 容器(比 IMO 的 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

【讨论】:

  • @Asier 我很高兴它确实有帮助。您可以将答案标记为正确 (i.stack.imgur.com/QpogP.png) 以更好地帮助社区。​​span>
猜你喜欢
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 2022-01-21
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2020-04-17
相关资源
最近更新 更多