/ / Como configurar a janela de encaixe compor para usar uma determinada sub-rede se uma variável estiver definida ou escolher por si mesma se não estiver? - janela de encaixe, variáveis ​​de ambiente, composição de encaixe, rede de encaixe

Como configurar o docker para compor uma determinada sub-rede se uma variável estiver definida ou escolher por si, se não for? - janela de encaixe, variáveis ​​de ambiente, docker-compose, docker-networking

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 № 1

O 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