docker:build异常HttpHostConnectException: Connect to localhost:2375

本文解决 Docker Maven 插件版本过低导致的构建失败问题,并介绍如何正确配置 Docker 以启用远程 API 接口。通过更新插件版本至 1.0.0 和调整 Docker 的配置,确保 Maven 构建过程顺利进行。

docker安装在centos6.5

{project_home}>mvn clean package docker:build -DskipTests 遇到以下异常

[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.4.3:build (default-cli) on project eurekaserver: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

经查有两个地方需要更新

  • 升级docker-maven-plugin版本,从0.4.3更新到1.0.0
			<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>1.0.0</version>
...
    	    	        </plugin>
  • docker开启远程API端口,有两种方式,可依据自己的环境选择

a.1) 编辑docker

vim /etc/sysconfig/docker

other_args="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

:wq

service docker restart

a.2) 在windows系统环境变量中新建DOCKER_HOST值为tcp://{docker_ip}:2375,将这里的{docker_ip},替换为docker所在的centos服务器IP或主机名(用主机名,需要windows配置hosts)

b.1) 修改docker配置文件

#vi /usr/lib/systemd/system/docker.service
在ExecStart这一行后面加上(这里就写4个0,别改成自己的ip) 
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

改完后效果如下
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

:wq
保存退出,

重新加载配置文件#systemctl daemon-reload   ,
启动docker #systemctl start docker

参考文档:

https://blog.youkuaiyun.com/superdangbo/article/details/78558917

https://blog.youkuaiyun.com/lvyuan1234/article/details/69255944

https://www.oschina.net/question/2520876_2218738

### 解决方案 当尝试通过 Docker Java API 连接到位于 `http://localhost:2376` 的 Docker 守护进程时,可能会遇到配置或网络相关的问题。以下是详细的分析和解决方案。 #### 1. 配置守护进程监听端口 默认情况下,Docker 守护进程可能不会监听指定的 TCP 端口(如 2376)。为了使它能够接受远程连接,需要修改其配置文件并重新加载服务: - 编辑 `/etc/docker/daemon.json` 文件,添加以下内容以启用特定 IP 地址和端口的监听: ```json { "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"] } ``` - 执行以下命令以应用更改并重启 Docker 服务[^1]: ```bash sudo systemctl daemon-reload sudo systemctl restart docker ``` 确认 Docker 是否成功绑定到指定端口: ```bash sudo netstat -tuln | grep 2376 ``` 如果没有看到任何输出,则说明配置未生效,需进一步排查。 #### 2. 卸载旧版本冲突组件 如果之前安装过其他版本的 Docker 或者存在残留文件,可能导致当前版本无法正常工作。可以通过以下命令清理环境后再重新安装最新版 Docker[^2]: ```bash sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine ``` 之后按照官方文档指导完成全新部署流程即可。 #### 3. DNS 设置问题引发错误 某些场景下由于本地DNS解析异常也会造成类似的访问障碍现象。比如当你试图pull某个远端镜像却收到类似下面这样的反馈信息时: > Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: dial tcp: lookup www.ik8s.ip on 183.60.83.19:53: no such host 此时建议调整系统的DNS服务器指向更稳定的服务提供商例如Google Public DNS (8.8.8.8)[^3]. 修改方法如下所示: 编辑 `/etc/resolv.conf`, 添加或者替换现有条目为: ``` nameserver 8.8.8.8 nameserver 8.8.4.4 ``` 保存退出后再次测试联网状况看是否有改善. #### 4. 特定防火墙规则阻止通信 还需注意的是企业内部网络安全策略往往会对进出流量加以限制从而影响外部资源获取能力。因此有必要核查iptables设定是否存在针对目标端口号(此处即指代2376)所施加的封锁措施。可临时关闭firewalld来验证假设成立与否: ```bash sudo systemctl stop firewalld ``` 当然生产环境中不推荐完全禁用防护机制而是应该精确放行所需请求路径。 最后附上一段简单的Java代码片段用于演示如何借助[Docker-java](https://github.com/docker-java/docker-java)库实现基本交互功能: ```java import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientBuilder; public class Main { public static void main(String[] args){ DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() .withDockerHost("tcp://localhost:2376") // Set remote endpoint here. .build(); DockerClient client = DockerClientBuilder.getInstance(config).build(); System.out.println(client.infoCmd().exec()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值