docker配置jenkins slave时,报provided port 50000 is not reachable异常
1.背景描述
采用docker配置jenkins的master-slave时,在slave机器执行从节点对接master命令:
java -jar agent.jar -jnlpUrl http://192.168.10.136:8080/computer/slave1/slave-agent.jnlp -secret 1c6f46bcb3d50b9bd765e27a77ac8b8230555639b2f9c21e20c41720b0219505 -workDir "/usr/local/data/jenkins/jenkins_slave"
2.异常信息:
严重: http://192.168.10.136:8080/ provided port:50000 is not reachable
java.io.IOException: http://192.168.10.136:8080/ provided port:50000 is not reachable
at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:314)
at hudson.remoting.Engine.innerRun(Engine.java:694)
at hudson.remoting.Engine.run(Engine.java:519)
3.异常原因:
docker容器下jenkins设置的端口没有映射到宿主机端口。
4.解决方法
4.1 确认并指定master机器jenkins代理端口为指定端口,并勾选代理协议
4.2 启动docker时,设置50000端口映射
docker run -d -p 8080:8080 -p 50000:5000 --name jenkins \
-u root \
-v /usr/local/data/jenkins/jenkins_home:/var/jenkins_home \
jenkins/jenkins
附:运行时docker容器添加端口映射
第一种方式:
1. 获取容器IP
docker inspect <container_id> | grep IPAddress
2. 通过iptable转发端口,并做映射
iptables -t nat -A DOCKER -p tcp --dport 50000 -j DNAT --to-destination 172.17.0.3:50000
3.重启容器
docker restart <container_id>
第二种方式:
1. 将容器commit为镜像
docker commit -a='作者' -m='备注' 运行时容器ID 新镜像名称
2. 重新运行新镜像,并设置50000端口映射