我正在尝试从 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/
干杯!