Dans mon travail, je travaille avec docker et l'option --net=Host
fonctionne comme un charme qui transfère les ports du conteneur de docker vers la machine. Cela me permet d’ajouter des tâches Grunt utilisant certains ports par exemple:
Quand j'ai commencé à utiliser Docker sur Mac, le premier problème que j'ai eu était: L'option --net=Host
ne fonctionne plus. J'ai cherché et je comprends pourquoi cela n’est pas possible (Docker sur Mac fonctionne sur une propre machine virtuelle) et ma solution temporaire utilise l’option -p
pour exposer les ports, mais cette limite me permet utiliser des ports parce que j’ai besoin d’exécuter la commande explicite -p
pour chaque port que j’ai besoin d’exposer.
Quelqu'un avec ce même problème? Comment gérer cela?
Votre problème est probablement que vous utilisez dockertoolbox ou dhingy/dlite ou toute autre solution fournissant un Linux à part entière VM, qui héberge ensuite docker pour exécuter votre conteneur à l'intérieur de cette machine virtuelle. Bien entendu, ce VM possède sa propre pile réseau et sa propre adresse IP sur l'hôte, et c'est à ce moment-là que vos outils auront des problèmes. Les ports exposés du conteneur ne sont pas exposés à OSX Host localhost
, mais plutôt à OSX Docker-VM-ip
.
Pour résoudre ces problèmes avec élégance
localhost
à partir du conteneurdocker run -p 3306:3306 percona
, il liera 3306 sur le osx-Host-localhost
, ainsi tout autre outil osx essayant de se lier à localhost: 3306 fonctionnera (très utile) exactement comme vous l’aviez utilisé lors de l’installation de mysql avec brew install mysql
ou de la même manière.Vous n'exportez rien en particulier, vous les rendez plutôt accessibles dans leur ensemble à partir de tous les conteneurs (tous les ports de OSX-Host-localhost).
Si vous souhaitez attacher à un port que vous avez proposé sur l'hôte OSX, depuis un conteneur, par exemple. lors d'une session xdebug, votre IDE écoute sur le port 9000 sur l'hôte OSX-Host-localhost et le conteneur qui exécute FPM/PHP doit utiliser attacher à cet hôte osx-local: 9000 sur le mac, vous devez le faire: https://Gist.github.com/EugenMayer/3019516e5a3b3a01b6eac88190327e7c
Ainsi, vous créez une adresse IP de bouclage factice, de sorte que vous pouvez accéder à vos ports OSX-Host sans conteneurs en utilisant 10.254.254.254:9000 - ceci est portable et vous donne fondamentalement tout ce dont vous avez besoin pour développer comme vous avez l'habitude de le faire.
Donc, on vous donne la connectivité aux ports exposés par le conteneur pour les applications fonctionnant sur le Mac et essayant de se connecter à localhost: port
Et la seconde l’inverse, si quelque chose dans le conteneur veut s’attacher à un port de l’hôte.
Une solution de contournement, mentionnée dans " Lier les ports de conteneur à l'hôte ", serait d'utiliser -P
:
(ou
--publish-all=true|false
) àdocker run
est une opération généralisée qui identifie chaque port avec une ligneEXPOSE
dans le champ Dockerfile ou--expose <port>
de l’image et le mappe sur un port hôte dans une plage de ports éphémères.
La commandedocker port
doit ensuite être utilisée pour inspecter le mappage créé.
Ainsi, si votre application peut utiliser docker port <CONTAINER>
pour récupérer le port mappé, vous pouvez ajouter autant de conteneurs que vous le souhaitez et obtenir les ports mappés de cette façon (sans avoir besoin d'une "commande explicite -p
pour chaque port").
Pas sûr que docker pour mac puisse supporter une connexion bidirectionnelle ultérieurement https://forums.docker.com/t/will-docker-for-mac-support-bi-directional-connection-between-Host-and-container -in-the-future/19871
J'ai deux solutions: