7
votes

Comment utiliser le réseau hôte pour la composition de docker?

Je souhaite utiliser docker compose avec le réseau hôte.

J'ai un conteneur Docker qui accède à une API REST locale. Habituellement, je lance

Ignoring unsupported options: network_mode

qui peut accéder à l'API REST de l'hôte qui s'exécute à http://127.0.0.1:8080 . Puisque je veux mettre à l'échelle le conteneur containera , j'ai trouvé docker compose pour redimensionner le conteneur. Mais le fichier de composition du docker de la documentation ne fonctionne pas. Le conteneur Docker n'interroge pas l'API REST.

J'ai essayé le fichier de composition suivant mais la propriété

version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    ports:
      - "18080:8080"

mais la propriété network_mode est ignorée / non autorisée. avec le message

docker run --net=host -p 18080:8080 -t -i containera


4 commentaires

Utilisez-vous docker swarm? Comment vous déployez-vous? docker-compose up ou déploiement de la pile docker ? En fonction de cela, votre fichier de composition actuel peut comporter plusieurs erreurs.


Actuellement, j'utilise l'essaim. mais quand j'utilise docker-compose up renvoie également services.web.build contient une option non prise en charge: 'network'


Les déploiements Swarm et compose sont très différents et votre fichier yml est généralement invalide dans les deux modes car vous mélangez les options des deux modes. Veuillez indiquer la méthode de déploiement que vous comptez utiliser pour obtenir une réponse correcte (et ajoutez la balise docker-swarm et supprimez la balise docker-compose selon la réponse que vous souhaitez)


Merci pour la clarification. Je souhaite utiliser le déploiement de composition et l'ajouterai à la question


4 Réponses :


5
votes

La configuration équivalente pour docker-compose utilise la clé network_mode : https://docs.docker.com/compose/compose-file/#network_mode

Vous devez définir network_mode sur "host" dans votre docker-compose.yml .


5 commentaires

Comment puis-je utiliser ce mode réseau pour la version 3 dans un essaim? ou comment puis-je ajouter le mode réseau puisque j'obtiens une version de fichier de composition non prise en charge différente de 3


network_mode est utilisé dans v3 et v2. v1 l'a appelé net : docs .docker.com / compose / compose-fichier / compose-fichier-v1 / # net


J'ai ajouté net à mon fichier de composition mais la propriété net est ignorée


Avec le fichier de rédaction dans votre question mise à jour, vous avez la version: "3" , vous devriez donc utiliser network_mode .


essayé les deux mais le network_mode obtient toujours l'ignorer



0
votes

Sur quelle plateforme êtes-vous? Le mode hôte fonctionne sous Linux uniquement AFAIK. Si network_mode ne fonctionne pas, essayez network: host ?

version: '3.4'
serivces:
  some_service:
  build:
    network: host


2 commentaires

Sur arch linux, j'obtiens le message d'erreur `services.web.build Le réseau de propriétés supplémentaires n'est pas autorisé`


sur Ubuntu: option de configuration non prise en charge pour services.build: 'network'



2
votes

Je pense que vous devriez définir le fichier docker-compose comme ceci: Ceci n'est qu'un exemple, veuillez lire la documentation: https://docs.docker.com/compose/compose-file / # référence-de-configuration-réseau

version: "3"
services:
  web:
    image: conatinera:latest
    networks:
      mynetwork: {}
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    ports:
      - "18080:8080"
networks:
  mynetwork:
    external: true
    name: host


2 commentaires

J'obtiens le message d'erreur name Le nom de propriété supplémentaire n'est pas autorisé


essayez d'utiliser la version 3.7 de docker-compose



4
votes

Vous mélangez des options qui ne sont pas valides sur les déploiements de composition et de swarm.

Si vous déployez avec docker-compose up, votre fichier de composition devrait ressembler à ceci:

version: "3.4"
services:
  web:
    image: conatinera:latest
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    networks:
      - host

networks:
  host:
    name: host
    external: true

Les options deploy sont ignorées en mode de composition et l'option ports est ignorée lors de l'utilisation du réseau en mode hôte. Je recommande de ne pas utiliser de mise en réseau en mode hôte et d'utiliser un proxy inverse dans un autre conteneur pour équilibrer vos conteneurs mis à l'échelle.


(N'hésitez pas à ignorer cette partie de la réponse lorsque vous avez précisé que vous n'êtes pas n'utilisez pas de déploiements swarm).

Si vous utilisez un déploiement swarm, votre fichier de composition devrait être comme ceci:

version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"        
    restart: on-failure

Encore une fois, les ports et l'hôte le réseautage en mode ne se mélange pas. Il est également probable que votre mise à l'échelle échouera car tous les conteneurs essaieront de se lier au même port. Je recommande de ne pas utiliser de mise en réseau en mode hôte et de laisser docker équilibrer la charge de vos répliques.


0 commentaires