jenkins 如何防止集装箱暴露在世界港口,但它可以访问互联网?

2guxujil  于 2022-11-21  发布在  Jenkins
关注(0)|答案(1)|浏览(139)

我使用以下命令在服务器上运行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仍然可以访问互联网?

pcrecxhr

pcrecxhr1#

https://docs.docker.com/engine/reference/commandline/run/开始:

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

这会将容器的端口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

相关问题