web-dev-qa-db-fra.com

Créez automatiquement des réseaux dans Docker Compose

Lorsque vous utilisez des réseaux personnalisés dans Docker comme

networks:
  default:
    external:
      name: service-tier

Et essayez d'exécuter ça, je reçois l'erreur

ERREUR: le niveau de service réseau déclaré comme externe, mais introuvable. Veuillez créer le réseau manuellement à l'aide de docker network create service-tier et essayez à nouveau.

Est-il possible de créer des réseaux automatiquement avec docker-compose ou n'y a-t-il pas d'autre moyen que de les créer manuellement d'abord?

9
Marian Klühspies

external consiste à utiliser un réseau existant. Si vous voulez composer pour créer des réseaux, vous faites simplement:

networks:
  network1:
  network2:

.. pour instruire composer pour faire les réseaux. Ils seront nommés <compose-dir>-<network name> Vérifiez la création à l'aide de docker network ls.

Vous pouvez également remplacer le réseau par défaut ou spécifier plus de propriétés.

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 1450

.. remplacera le paramètre réseau par défaut MTU à 1450 (pratique lorsque l'hôte a moins de 1500 mtu et que la découverte du chemin mtu ne fonctionne pas correctement). Il y a autres options de pilote de pont .

external est plus logique lorsque vous souhaitez que les services dans deux configurations de composition se parlent ou que vous ayez un réseau créé manuellement.

10
Grimmy

Comme @ Grimmy l'indique correctement, Docker crée tous les réseaux mentionnés, donc ceux-ci peuvent être référencés plus tard en exécutant un autre fichier de composition.

Mais, le nom de réseau généré par défaut n'est ni pratique ni robuste. Cela pourrait s'avérer très long ou l'équipe docker change d'avis sur la stratégie de nommage.

Mais depuis composer la version du fichier 3.5 (veux dire docker-compose version 1.18.0) on peut nommer le réseau à sa guise, donc la solution globale est encore plus robuste.

Veuillez consulter les extraits suivants montrant comment y parvenir:

Composez le fichier 1

version: '3.5'
services:
  svc-name:

    ...                          

    networks:
      - specific-network-name
    container_name: "exact-container-reference"

    ...

networks:
  specific-network-name:
    external: false
    name: specific-network-name

Composez le fichier 2

version: '2'
services:

  svc-using-svc-name:

    ...

    networks:
      - default
      - specific-network-name
    external_links:
      - exact-container-reference

    ...

networks:
  specific-network-name:
    external: true
7
helvete