web-dev-qa-db-fra.com

Quel est l'équivalent linux de "docker.for.mac.Host.internal"

Sur Mac et Windows, il est possible d'utiliser docker.for.mac.Host.internal (remplace docker.for.mac.localhost) et docker.for.win.Host.internal (remplace docker.for.win.localhost) Host.docker.internal (Docker 18.03+) à l'intérieur du conteneur.

Existe-t-il une solution pour Linux qui fonctionne immédiatement sans passer de variables env ou extraire à l’aide de diverses commandes cli.

21
klor

Cela dépend de ce que vous essayez de faire. Si vous courez avec --net=Host, localhost devrait fonctionner correctement. Si vous utilisez un réseau par défaut, utilisez l'adresse IP statique 172.17.0.1. Je pense que ni l'un ni l'autre ne se comportera de la même manière que ces domaines.

12
mark

Une solution consiste à utiliser un conteneur spécial qui redirige le trafic vers l'hôte. Vous pouvez trouver un tel conteneur ici: https://github.com/qoomon/docker-Host . L'idée est de récupérer la route par défaut dans le conteneur et de l'installer en tant que passerelle NAT pour les connexions entrantes).

Ci-dessous un exemple d'utilisation imaginaire:

docker-Host:
  image: qoomon/docker-Host
  cap_add: [ 'NET_ADMIN', 'NET_RAW' ]
  restart: on-failure
  environment:
    - PORTS=999

some-service:
  image: ...
  environment:
    SERVER_URL: "http://docker-Host:999"
  command: ...
  depends_on:
    - docker-Host
10
Jonas Chapuis

Pour Linux, il n'y a pas de nom DNS par défaut pour la machine hôte. Ceci peut être vérifié en lançant la commande:

docker run -it Alpine cat /etc/hosts

Cette fonctionnalité a été demandée, mais n'a pas été implémentée. Vous pouvez vérifier ceci numéro . Comme indiqué, vous pouvez utiliser la commande suivante pour rechercher l'adresse IP de l'hôte à partir du conteneur.

netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}'

Vous pouvez également fournir l'ip de l'hôte à la commande d'exécution via docker run --add-Host dockerHost:<ip-address> ...

7
yamenk