如果设置了变量,如何配置 docker 组合使用给定的子网,如果没有设置则自行选择?
How do configure docker compose to use a given subnet if a variable is set, or choose for itself if it isn't?
我的 docker 撰写文件中有以下网络配置。
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 没有动态修改配置的高级功能。
您可以在 multiple compose files 或基于模板的系统、shell 或其他启动 docker-compose
命令的语言中做出决定。
将网络配置与服务配置分开
docker-compose-net-auto.yml
version: "2.1"
networks:
default:
docker-compose-net-subnet.yml
version: "2.1"
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
我的 docker 撰写文件中有以下网络配置。
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 没有动态修改配置的高级功能。
您可以在 multiple compose files 或基于模板的系统、shell 或其他启动 docker-compose
命令的语言中做出决定。
将网络配置与服务配置分开
docker-compose-net-auto.yml
version: "2.1"
networks:
default:
docker-compose-net-subnet.yml
version: "2.1"
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