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 Réponses :
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
.
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
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
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'
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
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
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.
Utilisez-vous docker swarm? Comment vous déployez-vous?
docker-compose up
oudé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