jenkins Docker网桥无法从外部工作

eivgtgni  于 2023-04-19  发布在  Jenkins
关注(0)|答案(1)|浏览(141)

我正在尝试启动一个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?

olhwl3o2

olhwl3o21#

我在使用Ubuntu 22.X在AWS EC2示例下运行nginx容器时遇到了同样的问题。以下操作对我有效:
1.将IPV4数据包转发到所有接口(如果愿意,也可以选择特定接口):

sudo sysctl net.ipv4.conf.all.forwarding=1

1.在linux iptables防火墙中将FORWARD链的默认策略设置为ACCEPT:

sudo iptables -P FORWARD ACCEPT

请注意,通过上面的2个命令,你允许所有的流量在接口之间转发。如果你喜欢,你可以做得更具体。
同样,这些iptable规则在重启后也不会持久,所以你可能需要将它们永久写入相关的配置文件中。
以下命令可能对跟踪有用:

  1. docker桥的TCP转储,以查看传入的流量:sudo tcpdump -i docker0
    1.列出内核NAT规则:sudo iptables -t nat -L -n

相关问题