在Docker Ubuntu镜像中手动安装Jenkins后无法从宿主机访问如何解决
容器内Jenkins服务宿主机访问方案
Docker容器默认使用隔离的网络命名空间,宿主机无法直接访问容器内部监听的端口,Jenkins默认在容器内监听8080端口,你可以根据场景选择以下两种方案实现访问:
场景1:可重启当前容器(推荐长期使用)
你已经在当前容器内完成了JDK和Jenkins的配置,首先需要将当前容器保存为镜像避免配置丢失:
- 提交当前容器为自定义镜像:
docker commit 42024442b87b my-jenkins:v1 - 停止当前运行的旧容器:
docker stop 42024442b87b - 基于自定义镜像启动带端口映射的新容器:
docker run -d -p 8080:8080 -p 50000:50000 --name my-jenkins my-jenkins:v1 service jenkins start
其中-p 宿主机端口:容器端口为端口映射参数,8080为Jenkins web服务端口,50000为Jenkins agent节点通信端口,你可以根据需求修改宿主机侧的端口号,只要保证宿主机端口未被占用即可。 - 配置完成后直接在宿主机浏览器访问
http://localhost:8080即可进入Jenkins初始化页面,首次访问需要的初始管理员密码,可以进入容器后执行cat /var/lib/jenkins/secrets/initialAdminPassword获取。
场景2:不可重启当前运行的容器
你可以通过配置宿主机iptables规则实现端口转发,无需重启容器:
- 先查询当前容器的内部IP地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 42024442b87b,执行后会返回类似172.17.0.2的容器内网IP - 在宿主机执行iptables规则配置,将宿主机8080端口的流量转发到容器内部的8080端口:
iptables -t nat -A DOCKER -p tcp --dport 8080 -j DNAT --to-destination <替换为上一步查到的容器内网IP>:8080 - 配置完成后即可在宿主机访问
http://localhost:8080使用Jenkins
注意:该iptables规则在宿主机重启后会失效,仅适合临时调试使用
内容的提问来源于stack exchange,提问作者guru
相关产品推荐
相关产品推荐

