30 Sep 2019
在没有指定加入网络的情况下,docker-compose会默认创建一个网络,重点概括如下:
<folder_name>是一个project<folder_name>_defaultservice_name当做对方的hostname容器端口,而不必要去使用对方的主机端口可以使用networks这个顶级key来创建网络,然后在各个service里面使用networks来指定service加入的网络。当然,也可以不使用networks顶级key创建网络,直接在service里面指定要加入的非docker-compose创建的网络。
下面这个例子中,proxy因为不需要访问db,所以只和app在同一个网络中,而app则同时处于proxy和db所在的网络中
version: "3" services: proxy: build: ./proxy networks: - frontend app: build: ./app networks: frontend: aliases: - upstream - alias2 backend: aliases: - db-client db: image: postgres networks: backend: db_net: ipv4_address: 172.16.238.10 ipv6_address: 2001:3984:3989::10 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" db_net: driver: bridge enable_ipv6: true ipam: driver: default config: - subnet: 172.16.238.0/24 gateway: 172.16.238.1 - subnet: 2001:3984:3989::/64 gateway: 2001:3984:3989::1
注意以下两项配置:
- aliases: 在不同网络中,给每个service设定多个hostname
- ipv4&ipv6的地址配置和地址指定
如果你的project还是全部在同一个网络中,你只是想改动默认网络的部分配置,可以按照下面的方式
version: "3.5" services: web: build: . ports: - "8000:8000" db: image: postgres networks: default: # Use a custom driver name: default_network driver: custom-driver-1
如果想把外部网络拿来当成默认网络,可以这样使用
networks: default: external: name: my-pre-existing-network