默认网络 默认情况下,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: 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: driver: custom-driver-1 backend: 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