web-dev-qa-db-fra.com

Comment utiliser le réseau hôte et tout autre réseau défini par l'utilisateur ensemble dans Docker-Compose?

Je veux connecter deux conteneurs Docker, définis dans un fichier Docker-Compose (app et db). Et l'un d'eux (app) doit également être connecté au réseau Host.

Les conteneurs doivent être connectés à un réseau défini par l'utilisateur commun (appnet ou default) pour utiliser les capacités DNS intégré du réseau Docker.

app doit également être directement connecté au réseau hôte pour recevoir les diffusions Ethernet (couche réseau 2) dans le réseau physique de l'hôte docker.

Si j'utilise les deux directives network_mode: Host et networks dans composer ensemble, j'obtiens l'erreur suivante.

ERROR: 'network_mode' and 'networks' cannot be combined

Je dois donc le faire avec networks uniquement !?

version: "3.3"

services:

  app:
    build: .
    image: app
    container_name: app
    environment:
      - MONGODB_Host=db
    depends_on:
      - db
    networks:
      - appnet
      - hostnet

  db:
    image: mongo:latest
    container_name: db
    networks:
      - appnet

networks:
  appnet:
  hostnet:
    external:
      name: Host

Le fichier de composition précédent génère une erreur. ERROR: for app network-scoped alias is supported only for containers in user defined networks

Si j'utilise le nom de réseau Host dans le service sans le définir dans les réseaux (car il existe déjà), dit-il. ERROR: Service "app" uses an undefined network "Host"

Comment utiliser le réseau Host et tout autre réseau défini par l'utilisateur (ou le réseau par défaut) ensemble dans Docker-Compose?

J'utilise Docker version 17.11.0-ce-rc3, build 5b4af4f et docker-compose version 1.17.1, build 6d101fb

18
Simon Schürg

TL; DR vous ne pouvez pas. Le réseau hôte désactive l'espace de noms du réseau Docker pour ce conteneur. Vous ne pouvez pas l'activer et le désactiver en même temps.

Au lieu de cela, connectez-vous à votre base de données avec un port publié ou un socket Unix que vous pouvez partager en tant que volume. Par exemple. voici comment publier le port:

version: "3.3"

services:

  app:
    build: .
    image: app
    container_name: app
    environment:
      - MONGODB_Host=127.0.0.1

  db:
    image: mongo:latest
    container_name: db
    ports:
      - 127.0.0.1:27017:27017
1
BMitch

Pour utiliser le réseau hôte, vous n'avez pas besoin de le définir. Utilisez simplement le mot-clé "ports" pour définir le ou les ports du service que vous souhaitez exposer dans le réseau hôte.

1
Miq