我的 docker compose 文件中有以下网络配置。
networks:
default:
ipam:
driver: default
config:
- subnet: ${DOCKER_SUBNET}
设置
DOCKER_SUBNET
后,将按预期使用该变量中指定的子网。当未设置变量时,我得到:ERROR: Invalid subnet : invalid CIDR address:
,因为变量为空(这是完全合理的)。
有没有办法配置 ipam 驱动程序,以便在未设置
DOCKER_SUBNET
变量时,docker-compose 将选择一个可用的子网,就像未给出 ipam 配置时通常所做的那样?
ipam
配置,则Compose 只会选择可用的子网。 Compose 不具备动态修改配置的高级功能。
您可以在撰写之外做出决定,可以使用多个撰写文件或基于模板的系统,在 shell 或启动
docker-compose
命令的某种其他语言中。
将撰写网络配置与文件中的其余服务配置分开:
docker-compose-net-auto.yml
networks:
default:
docker-compose-net-subnet.yml
networks:
default:
ipam:
driver: default
config:
- subnet: ${DOCKER_SUBNET}
然后创建一个脚本
launch.sh
来选择要包含哪个网络文件。
#!/bin/sh
if [ -z "$DOCKER_SUBNET" ]; then
docker-compose -f docker-compose.yml -f docker-compose-net-auto.yml up
else
docker-compose -f docker-compose.yml -f docker-compose-net-subnet.yml up
fi
networks:
Mynetwork:
driver: bridge
ipam:
driver: default
config:
- subnet: "192.168.0.0/24"
gateway: "192.168.0.1"
#- default:
#driver: bridge