我已经使用以下方法运行了 portainer 图像:
docker run -d -P -p 9000:9000 portainer/portainer
但只能使用 lynx 在本地通过端口 9000 访问网络。我允许防火墙在端口 9000 上传入和传出,所以这应该不是问题。
$sudo iptables -t filter -L -n -v | grep 9000 0 0 接受 tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.2 tcp dpt:9000
但是我很难解释NAT表,这可能是可疑的。
$ sudo iptables -t nat -L -n -v Chain PREROUTING (policy ACCEPT 7 packets, 420 bytes) pkts bytes target prot opt in out
source destination 415 24676 DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL链输入(策略接受 1 个数据包,60 字节)数据包字节目标
协议选择加入退出源目标链输出(策略接受 0 个数据包,0 个字节)pkts 字节目标
协议选择加入退出源目标
0 0 DOCKER 全部 -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE 匹配目标类型 LOCAL链 POSTROUTING(策略接受 0 个数据包,0 字节)pkts 字节目标 prot 选择加入退出源目标
0 0 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0 0 0 MASQUERADE tcp -- * * 172.17.0.2 172.17.0.2 tcp dpt:9000
链 DOCKER(2 个引用)pkts 字节目标 prot 选择加入退出源目标
0 0 返回全部 -- docker0 * 0.0.0.0/0 0.0.0.0/0
0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 to:172.17.0.2:9000
有人可以帮我从这里出去吗?
更新1:
我在另一台使用相同 docker 版本的 Ubuntu 服务器上尝试了相同的命令,但它有效。运行并绑定容器后,NAT 表中的唯一区别是 POSTROUTING 记录,其中显示:
pkts 字节目标协议选择加入退出源目标
0 0 MASQUERADE 全部 -- * eth0 10.0.0.0/8 0.0.0.0/0
但我认为这可能不相关,或者是相关的?
Ubuntu 16.04 Docker 版本 17.05.0-ce,内部版本 89658be
答案1
感谢大家在评论中提供帮助,
事实证明,我刚刚用来nmap <host>
检查打开的端口,发现 9000 没有打开,尽管内部防火墙/iptables 另有说明。
然后我记得我使用的 VPS 还有另一个外部防火墙层,我也必须配置它。我真笨,但我学会了基本的跟踪过程/命令。谢谢大家!