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
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
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.