Docker容器从不同的子网开始

时间:2016-10-22 09:33:40

标签: wordpress networking nginx docker

我必须启动3个容器,nginx,wordpress和wordpress2。问题是nginx容器从172.17.0.2开始,wordpress在172.18.0.3,wordpress2在172.19.0.4。 wordpress容器以docker-compose.yml开头,配置为我显示:

对于wordpress:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://schema.infor.com/InforOAGIS/2">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />   

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<!-- Rename attribute Class to MROClass --> 


<xsl:template match="@ListID[.='CLASS']">
    <xsl:attribute name="ListID">
        <xsl:value-of select="'MROClass'"/>
    </xsl:attribute>
 </xsl:template>

</xsl:stylesheet>

对于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:
       - "8000:80"
     networks:
       - ipv4_address: 172.17.0.5
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_PASSWORD: wordpress

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

1 个答案:

答案 0 :(得分:1)

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

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

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

然后您将能够使用external_links访问您的wordpress容器(优于IP地址的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