多个docker-compose配置连接同一网络(networks)

docker 运行 nginxdjango 两个容器,每个容器有各自的 docker-compose.yaml 文件。两个容器要实现相互访问需连接同一网络,我还需要自定义容器IP(我不希望nginx配置文件的转发代理地址是动态变化的)

创建网络

首先创建一个名为 web_net 的网络,子网 172.32.0.0/24 可自定义

1
docker network create --subnet=172.32.0.0/24 web_net

查看网络

1
docker network ls

删除某个网络

1
docker network rm < NAME >

docker-compose.yaml 配置

nginx 容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: "3.6"

networks:
default:
external: true
name: web_net

services:
nginx:
image: nginx:latest
container_name: nginx
restart: always
networks:
default:
ipv4_address: 172.32.0.2
ports:
- "80:80"
- "443:443"

django 容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: "3.6"

networks:
default:
external: true
name: web_net

services:
django:
image: django:latest
container_name: django
restart: always
networks:
default:
ipv4_address: 172.32.0.3
ports:
- "8080:8080"

nginx 配置 conf 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
upstream django {
server 172.32.0.3:8080;
}

# HTTPS server
#
server {

listen 443 ssl;
server_name www.gaoyuanqi.cn;

...

location / {
proxy_pass http://django;
}
}

访问 www.gaoyuanqi.cn 域名的请求将被转发到 172.32.0.3:8080django 容器

说明

每个 docker-compose 都有

1
2
3
4
5
6
7
8
9
10
11
networks:
default:
external: true
name: web_net
...

services:
xxx:
networks:
default:
ipv4_address: 172.32.0.2
  • name : 指定已存在的网络名称
  • ipv4_address : 指定容器IP
  • 172.32.0.0172.32.0.1 最后一位的子网掩码位数 01 已经被使用,所以不能在 docker-compose.yaml 文件中写入了