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端口映射