默认网络

默认情况下,compose中的多个服务会加入一个名为default的网络。这些服务在default网络中是互通的。该default网络的全称是以compose文件所在文件夹名字做为前缀。比如文件夹为hello_world的compose。其一组服务对应的网络名为:hello_world_default。 这组service在该网络中,以compose文件中的第二组端口通信。

1
2
3
4
5
6
7
8
9
10
version: "3"
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
ports:
- "8001:5432"

比如上述配置中,在hello_world_default网络中,web服务使用8000端口和db服务的5432端口通信。第一组端口8000和8001是宿主机访问web和db服务的端口。

使用已存在的网络

1
2
3
4
docker network create es-net
networks:
es-net:
external: true

对默认网络进行独立配置

如果想改变默认网络的配置,可以在compose文件中,单独通过networks项来改变,比如以下改变默认网络驱动

1
2
3
4
networks:
default:
# Use a custom driver
driver: custom-driver-1

配置和使用非默认网络

定义多个网络,并使用

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
version: "3"
services:

proxy:
build: ./proxy
networks:
- frontend
app:
build: ./app
networks:
- frontend
- backend
db:
image: postgres
networks:
- backend

networks:
frontend:
# Use a custom driver
driver: custom-driver-1
backend:
# Use a custom driver which takes special options
driver: custom-driver-2
driver_opts:
foo: "1"
bar: "2"

上述配置定义了两个网络,frontend 和 backend。其中app 能访问这两个网络,proxy服务只能访问frontend网络,db只能访问backend网络

自定义网卡,分配subnet, 以使得单机下多组容器分配不同ip在同一个bridge下(&标注的是变量,使用*引用变量)

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
28
29
30
31
32
33
version: '3'

networks:
&network network:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/16

services:
&master redis-master:
image: &image registry.cn-hangzhou.aliyuncs.com/kennylee/redis:3.2
container_name: "master"
ports:
- "6379:6379"
restart: on-failure
command: [ "redis-server" ]
networks:
*network :
ipv4_address: 172.16.238.10
redis-slave-1:
image: *image
container_name: "slave"
ports:
- "6380:6379"
restart: on-failure
command: [ "redis-server","--slaveof","172.16.238.10", "6379","--slave-read-only","yes"]
networks:
*network :
ipv4_address: 172.16.238.11
depends_on:
- *master