从Docker容器访问主机数据库

如果我有一个主机上运行的mysql数据库,并且该主机也在运行一个docker容器:我将如何从主机上运行的docker容器内访问mysql数据库?

例如,有没有办法将主机端口发布到容器(与docker run -p相反)?

关于如何以一致的,易于理解和便携的方式来做到这一点,有几个长期的讨论。 没有完整的解决scheme,但我会将您链接到下面的讨论。

在任何情况下,你都想尝试使用–add-host选项来运行docker,将主机的ip地址添加到容器的/ etc / host文件中。 从那里连接到任何需要的端口上的主机是微不足道的:

将条目添加到容器主机文件

您可以使用一个或多个–add-host标志将其他主机添加到容器的/ etc / hosts文件中。 本示例为名为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 

注意:有时您需要连接到Docker主机,这意味着获取主机的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://docs.docker.com/engine/reference/commandline/run/

讨论从容器访问主机:

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

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

从Docker 17.06开始,在Docker容器中提供了一个特殊的仅限于Mac的DNS名称,它parsing为主机的IP地址。 它是:

docker.for.mac.localhost

文档在这里: https : //docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support