2015-01-20 162 views
56

如果我有一個在某臺主機上運行的mysql數據庫,並且該主機也在運行一個碼頭容器:我如何從主機上運行的碼頭容器內訪問mysql數據庫?。從碼頭集裝箱訪問主機數據庫

例如,有沒有辦法將主機端口發佈到容器(與docker run -p相反)?

+0

如果MySQL服務器端口上監聽,不能在容器只是連接到主機在任何其他互聯網連接端口? – jwodder 2015-01-20 22:51:03

回答

55

關於如何以一致的,易於理解和便攜的方式進行此操作,有幾個長期的討論。沒有完整的解決方案,但我會將您鏈接到下面的討論。

在任何情況下,你都希望嘗試使用--add-host選項來運行docker以將主機的ip地址添加到容器的/ etc/host文件中。從那裏,它是微不足道的連接到主機的任何所需的端口:使用 一個

您可以添加其他主機放入容器中的/ etc/hosts文件

將條目添加到一個容器hosts文件或更多--add-host標誌。這個例子名爲泊塢窗 主機增加了一個靜態地址:

$ 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 

注:有時你需要連接到主機多克爾,這意味着 獲得主機的IP地址。您可以使用以下shell 命令來簡化這個過程:

$ 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 

文檔:

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

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

從容器訪問主機討論

+3

我不得不從你的hostip別名中刪除最後一個反斜槓。 – Private 2016-10-13 09:46:51

12

從Docker 17.06起,Docker容器中提供了一個特殊的僅限於Mac的DNS名稱,該名稱解析爲主機的IP地址。它是:

docker.for.mac.localhost

的文檔是在這裏: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support

+1

從Docker 17.12.0 ce開始'docker.for.mac.host.internal'。 https://docs.docker.com/docker-for-mac/release-notes/#docker-community-edition-17120-ce-mac46-2018-01-09-stable – Zangetsu 2018-02-01 20:17:20

相關問題