我必须启动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时,它在此行显示错误。我认为默认情况下,所有容器通常都在同一网络中出现,但在这种情况下并非如此。你能帮我把所有容器放在同一个子网上吗?
答案 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