1

J'ai la configuration de réseaux suivante dans mon fichier de composition docker.Comment configure docker compose pour utiliser un sous-réseau donné si une variable est définie, ou choisir pour lui-même si ce n'est pas le cas?

networks: 
    default: 
     ipam: 
      driver: default 
      config: 
       - subnet: ${DOCKER_SUBNET} 

Lorsque DOCKER_SUBNET est réglé, le sous-réseau spécifié dans cette variable est utilisée comme prévu. Lorsque la variable n'est pas définie, j'obtiens: ERROR: Invalid subnet : invalid CIDR address: car la variable est vide (ce qui est tout à fait raisonnable). Y at-il un moyen de configurer le pilote ipam de sorte que lorsque la variable DOCKER_SUBNET n'est pas définie, docker-composer choisira un sous-réseau disponible comme il le ferait normalement si la configuration ipam n'a pas été donnée?

Répondre

1

Compose choisira uniquement un sous-réseau disponible si vous ne fournissez aucune configuration ipam pour le réseau. Compose n'a pas de fonctionnalité avancée pour modifier la configuration à la volée.

Vous pouvez prendre la décision en dehors de composer, soit avec multiple compose files ou un système basé sur un modèle, en shell ou dans une autre langue qui lance la commande docker-compose.

votre config Separate réseau de votre service de configuration

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} 

Ensuite, créez un script launch.sh qui fait le choix du fichier réseau à inclure.

#!/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