docker@多个docker-compose文件下容器互通

目的

解决不同docker-compose在容器自动注册服务,服务间相互调用不通问题。

解决

通过自定义外部网络,不同文件引用外部网络

1.自定义网络

# 自动选择合适网段创建bridge
docker network create external-net 

# 查看本机所有有网络的子网(防止自定义冲突)
docker network inspect $(docker network ls -q) | grep Subnet

# 创建自定义bridge
docker network create \
  --driver=bridge \
  --subnet=192.168.100.0/24 \
  --gateway=192.168.100.1 \
  shared-net

2.引用外部网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 1
version: "3.8"

services:
app1:
image: myapp1
networks:
- shared-net

networks:
shared-net:
external: true

---
# 2
version: "3.8"

services:
app2:
image: myapp2
networks:
- shared-net

networks:
shared-net:
external: true

app1和app2都连接到了shared-net网络中,容器名最好显式设置container_name

3.支持自定义容器ip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 容器ip非固定
version: "3.8"

services:
app:
image: myapp
networks:
- shared-net

networks:
shared-net:
external: true
---

# 自定义容器ip
version: "3.8"

services:
app:
image: nginx
networks:
shared-net:
ipv4_address: 192.168.100.10

networks:
shared-net:
external: true

4.查看本机所有容器ip

docker inspect -f '{{ .Name }} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker-compose ps -q)