我使用以下命令在服务器上运行Jenkins容器示例:
docker run --name jenkins --restart=on-failure -d \
--network jenkins --env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/jenkincerts/client --env DOCKER_TLS_VERIFY=1 \
-p 8180:8080 -p 50000:50000 \
-v jenkins-home:/var/jenkins_home \
-v docker-certs-jk:/jenkincerts/client:ro \
myjenkin
但是我发现端口8180是公开的,所以我做了研究,找到了一个解决方案,使用以下命令添加iptables规则:
iptables -I DOCKER-USER -i eth0 ! -s 127.0.0.1 -j DROP
结果是端口关闭,但我的Jenkins示例无法访问Internet下载...
有人能帮我关闭暴露端口给世界,但我的Jenkins仍然可以访问互联网?
1条答案
按热度按时间pcrecxhr1#
从https://docs.docker.com/engine/reference/commandline/run/开始:
这会将容器的端口8080绑定到www.example.com上的TCP端口80 127.0.0.1 [...]
请注意,未绑定到主机的端口(即-p 80:80而不是-p 127.0.0.1:80:80)将可以从外部访问。如果您配置UFW来阻止此特定端口,这也适用,因为Docker管理它自己的iptables规则。
从,以及“阅读更多”链接https://docs.docker.com/network/iptables/:
默认情况下,Docker守护程序将公开0.0.0.0地址(即主机上的任何地址)上的端口。如果要将该行为更改为仅公开内部IP地址上的端口,可以使用--ip选项指定其他IP地址。但是,设置--ip仅更改默认值,不会将服务限制为该IP。
如果你想让docker只监听本地主机,执行
-p 127.0.0.1:8180:8080
。