Jenkins报错内容如下:

[Checks API] No suitable checks publisher found.
[Docker] ERROR: Failed to exec start:Connect to 192.168.40.37:2375 [/192.168.40.37] failed: connect timed out
[Docker] ERROR: Failed to create docker image: org.apache.http.conn.ConnectTimeoutException: Connect to 192.168.40.37:2375 [/192.168.40.37] failed: connect timed out
ERROR: Build step failed with exception
java.net.SocketTimeoutException: connect timed out
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:607)
	at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
Caused: org.apache.http.conn.ConnectTimeoutException: Connect to 192.168.40.37:2375 [/192.168.40.37] failed: connect timed out
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
	at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:374)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)

翻看原来的博客,貌似需要改/usr/lib/systemd/system/docker.service文件,在ExecStart=/usr/bin/dockerd 后插入 -H tcp://0.0.0.0:2375,然后试着改了一下:

vim /usr/lib/systemd/system/docker.service

修改之后,可以从docker的状态里面看到这个属性的值:
在这里插入图片描述
然后试着在自己电脑访问:Docker IP:2375/version 仍然访问不通,这就很神奇了。

然后试着在服务器上使用:curl http://服务器IP:2375/version,就是正常的,返回了一个json串。

那么接着看下防火墙:

#查看防火墙状态
systemctl status firewalld
#启动防火墙 没有提示
systemctl start firewalld
#添加2375端口
firewall-cmd --permanent --zone=public --add-port=2375/tcp
#防火墙重启
firewall-cmd --reload
#查看开放的端口
firewall-cmd --permanent --zone=public --list-ports

防火墙是开着的,然后看下开放的端口,却发现是空的,那么就把2375加上试下,然后重启防火墙:
在这里插入图片描述
这时再次访问,则外部电脑可以访问了。
在这里插入图片描述
这里有个我不理解的地方,在开放防火墙端口的时候,使用的是2375/tcp,我还以为只是tcp可以访问了呢,结果外部电脑都可以访问了。

然后来看下Jenkins的配置里面:
Docker Builder下的Docker URL
在这里插入图片描述
这个值刚好是我们之前配的Docker IP,是不是有点巧。

然后尝试再次构建,发现该异常已解决。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐