2015-01-20 19 views
56

Wenn auf einem Hostcomputer eine mysql-Datenbank ausgeführt wird und auf diesem Host auch ein Andockcontainer ausgeführt wird: Wie greife ich aus dem Andockcontainer, der auf dem Host ausgeführt wird, auf die mysql-Datenbank zu ?.Zugriff auf die Hostdatenbank über einen Andockcontainer

Gibt es zum Beispiel eine Möglichkeit, einen Host-Port im Container zu veröffentlichen (das Gegenteil von dem, was Docker-run -p tut)?

+0

Wenn der MySQL-Server auf einem Port lauscht, könnte nicht der Behälter nur mit dem Host verbinden an diesem Port wie jede andere Internetverbindung? – jwodder

Antwort

55

Es gibt mehrere langjährige Diskussionen darüber, wie dies auf konsistente, gut verständliche und portable Art und Weise zu tun ist. Keine vollständige Lösung, aber ich werde Sie mit den folgenden Diskussionen verlinken.

In jedem Fall möchten Sie versuchen, die Option --add-host zu verwenden, um die IP-Adresse des Hosts in die Datei/etc/host des Containers hinzuzufügen. Von dort ist es trivial an den Host auf jedem gewünschten Port zu verbinden:

Einträge in einer Container-Hosts Hinzufügen Datei

Sie andere Hosts in eine Datei/etc/hosts-Datei des Containers hinzufügen können mit einem oder mehr --add-host Flags. In diesem Beispiel wird eine statische Adresse für einen Host mit dem Namen Docker:

$ docker run --add-host=docker:10.180.0.1 --rm -it debian 
    $$ ping docker 
    PING docker (10.180.0.1): 48 data bytes 
    56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms 
    56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms 
    ^C--- docker ping statistics --- 
    2 packets transmitted, 2 packets received, 0% packet loss 
    round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms 

Hinweis: Manchmal müssen Sie mit dem Docker Host verbinden, was bedeutet, die IP-Adresse des Hosts zu bekommen. Sie können die folgenden Shell verwenden diesen Prozess zu vereinfachen Befehle:

$ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print $2 }'" 
$ docker run --add-host=docker:$(hostip) --rm -it debian 

Dokumentation:

https://docs.docker.com/engine/reference/commandline/run/

Diskussionen auf dem Host aus dem Behälter zuzugreifen:

https://github.com/docker/docker/issues/1143

https://github.com/docker/docker/issues/10023

+3

Ich musste den letzten Backslash von Ihrem Hostip-Alias ​​löschen. – Private

12

Ab Docker 17.06 ist in Dockercontainern ein spezieller Nur-Mac-DNS-Name verfügbar, der auf die IP-Adresse des Hosts aufgelöst wird. Es ist:

docker.for.mac.localhost

Die Dokumentation ist hier: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support

+1

'docker.for.mac.host.internal' von' Docker 17.12.0 ce' an. https://docs.docker.com/docker-for-mac/release-notes/#docker-community-edition-17120-ce-mac46-2018-01-09-stable – Zangetsu

Verwandte Themen