我有一个已发布端口 3001 的 docker 容器。我可以通过从主机 ping 来连接到该 docker 容器
$ netcat -vzn 0.0.0.0 3001
Connection to 0.0.0.0 3001 port [tcp/*] succeeded!
但是从主机外部来看,我得到了拒绝连接的信息。
$ netcat -vzn 10.0.0.154 3001
netcat: connect to 10.0.0.154 port 3001 (tcp) failed: Connection refused
Docker容器已发布的端口:
PORTS
0.0.0.0:3001->3001/tcp, :::3001->3001/tcp
主机防火墙已禁用。
主机是运行 Ubuntu 的物理服务器。
即使直接在主机网络上运行,容器也无法访问......
docker run -it -d -network=host ...
我已阅读所有文档,根据每条说明,在当前设置下,容器应该可以通过 hostIp:port 访问。我不确定 Docker 说明中是否还遗漏了其他内容,或者 Ubuntu Server OS 本身是否出现了问题,导致拒绝这些连接。
有什么想法吗?谢谢!
答案1
我遇到了完全相同的问题,但我不是 100% 确定,但 ubuntu 中仍然有一些规则可以阻止名为 iptables 的端口。您nmap localhost
可以查找哪些端口是开放的。
答案2
所以我明白发生了什么事...
虽然docker端口实际上在主机上正确暴露,但容器内应该监听这些端口的应用程序启动时间比我想象的要长。过了一会儿,docker容器内的应用程序终于启动了,然后就可以从主机外部访问端口了。