Eu tenho a seguinte configuração de rede no meu arquivo de composição do docker.
networks:
default:
ipam:
driver: default
config:
- subnet: ${DOCKER_SUBNET}
Quando DOCKER_SUBNET
é definida, a sub-rede especificada nessa variável é usada conforme o esperado. Quando a variável não está definida, recebo: ERROR: Invalid subnet : invalid CIDR address:
porque a variável está em branco (o que é totalmente razoável).
Existe uma maneira de configurar o driver do ipam de modo que, quando o DOCKER_SUBNET
variável não está definida, o docker-compose escolherá uma sub-rede disponível, como faria normalmente se a configuração do ipam não fosse fornecida?
Respostas:
2 para resposta № 1O Compose escolherá apenas uma sub-rede disponível se você não fornecer nenhum ipam
configuração para a rede. A composição não possui funcionalidade avançada para modificar a configuração em tempo real.
Você pode tomar a decisão fora da composição, com vários arquivos de composição ou um sistema baseado em modelo, no shell ou em algum outro idioma que inicie o docker-compose
comando.
Separe sua configuração de rede da sua configuração de serviço
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}
Em seguida, crie um script launch.sh
que faz a escolha de qual arquivo de rede incluir.
#!/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