2015-01-20 134 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