我正在尝试启动一个jenkins容器。端口8080Map到主机端口80。docker run -p 80:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
我可以从主机 curl Jenkins应用程序,但我不能从主机外部访问它。curl localhost:80
在主机内部工作
但是curl <fqdn or ip address>:80
在主机外部(与主机相同的网络)无法工作,并且超时。
如果我设置--net=host,上面的命令就可以工作,但是我不想使用主机网络,以防将来需要添加更多服务。
我认为这不是防火墙的问题,因为通过将网络设置为主机,链接正在工作。
使用tcpdump,我可以看到主机主接口中的请求,但是没有数据包被转发到docker 0接口。这是正常行为吗?
我该怎么做才能解决这个问题,才能联系到主机外的jenkins?
1条答案
按热度按时间olhwl3o21#
我在使用Ubuntu 22.X在AWS EC2示例下运行nginx容器时遇到了同样的问题。以下操作对我有效:
1.将IPV4数据包转发到所有接口(如果愿意,也可以选择特定接口):
1.在linux iptables防火墙中将FORWARD链的默认策略设置为ACCEPT:
请注意,通过上面的2个命令,你允许所有的流量在接口之间转发。如果你喜欢,你可以做得更具体。
同样,这些iptable规则在重启后也不会持久,所以你可能需要将它们永久写入相关的配置文件中。
以下命令可能对跟踪有用:
sudo tcpdump -i docker0
1.列出内核NAT规则:
sudo iptables -t nat -L -n