如果我在某个主机上运行 mysql 数据库,并且该主机也在运行 docker 容器:我将如何从主机上运行的 docker 容器中访问 mysql 数据库?
例如,有没有办法将主机端口发布到容器(与 docker run -p 相反)?
关于如何以一致、易于理解和可移植的方式执行此操作,有几个长期的讨论。没有完整的解决方案,但我会将您链接到下面的讨论。
在任何情况下,您都想尝试使用 –add-host 选项来 docker run 将主机的 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
将条目添加到容器主机文件
您可以使用一个或多个 –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