如何从docker容器访问主机端口?

如何从docker容器访问主机端口?

我正在尝试从 docker 容器内部访问主机上特定端口的服务。但我得到的只是“连接被拒绝”。为了调试目的,我通过 nc 创建了一个虚拟监听端口:

host$ nc -l 888
...

在容器里

container$ ping 172.16.238.1
PING 172.16.238.1 (172.16.238.1) 56(84) bytes of data.
64 bytes from 172.16.238.1: icmp_seq=1 ttl=64 time=0.071 ms

container$ nc -zv 172.16.238.1 888
172.16.238.1: inverse host lookup failed: Unknown host 
(UNKNOWN) [172.16.238.1] 888 (?) : Connection refused

我并不为失败的反向主机查找而烦恼,正如https://stackoverflow.com/questions/48779583/nc-command-inverse-host-lookup-failed-unknown-host

一些类似的问题指出绑定地址必须匹配,但这似乎没问题:

host$ lsof -i -P -n | grep LISTEN
nc        13405 richardkiefer    3u  IPv4 0x69a18bda503dc55d      0t0  TCP *:888 (LISTEN)

我知道您可以为容器分配主机的网络,这似乎可以解决其他类似问题,但出于安全原因,我想避免这样做。

我的动机是测试和开发目的,我希望到达主机上的 ssh 隧道端口(最终到达远程主机),因此我知道我可以链接运行不同服务的容器,如从 docker 容器连接到 docker 主机但它不能解决我的用例。

宿主机是macos,并且根据系统设置防火墙是关闭的。

有什么建议吗?提前致谢!

答案1

不知道您是否尝试过通过主机地址从容器内部联系主机,host.docker.internal该主机地址是 Mac 和 Windows 上仅用于开发/测试的特殊 DNS 名称。我自己没有尝试过,但正在寻找 Linux 的类似方法。

https://docs.docker.com/docker-for-mac/networking/

干杯!

相关内容