运行Docker-client Java API时,Apache Connection被拒绝

我正在尝试安装Docker客户端远程API库( https://github.com/spotify/docker-client )来执行一些图像search并检查图像数据(全部在公共存储库中)。 我有boot2docker虚拟机下载,安装并运行。 诸如“Docker pull ubuntu”之类的命令工作正常,但是现在我想通过Java程序来完成这个任务。 我使用Eclipse IDE Egit插件来导入github项目,并从现有的Master分支创build一个Maven / Java项目。 源代码完全导入,没有错误报告。 然后我试着写一个简单的testing:

final DockerClient docker = DefaultDockerClient.fromEnv().build(); //docker.pull("busybox"); List<ImageSearchResult> results = docker.searchImages("ubuntu"); for (ImageSearchResult res : results) { System.out.println(res.getName()); } 

但是,在Eclipse中运行代码时,出现以下错误:

 Exception in thread "main" com.spotify.docker.client.DockerException: java.util.concurrent.ExecutionException: 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 at com.spotify.docker.client.DefaultDockerClient.propagate(DefaultDockerClient.java:1109) at com.spotify.docker.client.DefaultDockerClient.request(DefaultDockerClient.java:1028) at com.spotify.docker.client.DefaultDockerClient.searchImages(DefaultDockerClient.java:653) at com.spotify.docker.client.main.Test.main(Test.java:28) 

我试图在该端口上设置一个Apache服务器,但后来我得到:

 Exception in thread "main" com.spotify.docker.client.DockerRequestException: Request error: GET http://localhost:2375/v1.12/images/search?term=ubuntu: 404 at com.spotify.docker.client.DefaultDockerClient.propagate(DefaultDockerClient.java:1100) at com.spotify.docker.client.DefaultDockerClient.request(DefaultDockerClient.java:1028) at com.spotify.docker.client.DefaultDockerClient.searchImages(DefaultDockerClient.java:653) at com.spotify.docker.client.main.Test.main(Test.java:28) 

任何人都可以告诉我,我应该在这里做我的search/拉电话工作? 这是我第一次尝试使用Docker,并且通过search文档并search了这个问题,但找不到有类似问题的人。

谢谢!

编辑:我通过预build的VM Boot2Docker在Windows 7中运行docker。 也许Docker守护进程不能从虚拟机以外的程序(如Eclipse)访问?

编辑:解决它通过升级到v1.6而不是v1.5,这使得守护进程可用的Windows主机。 目前的问题是,我所有的API调用都返回“服务器无法响应有效的HTTP响应”

我遇到了一个类似的问题,我设法解决这个问题,通过使用以下方式来build立DockerClient:

 final DockerClient docker = DefaultDockerClient.builder() .uri(URI.create("unix:///var/run/docker.sock")) .build(); 

我得到了同样的exception,但添加上面的URI部分帮助我解决了这个问题。 以下问题跟踪器提供了一个类似于上述问题的更好的解释以及如何解决这个问题。

https://github.com/spotify/docker-maven-plugin/issues/61

Java程序本质上是一个docker search :只能在docker引擎存在的环境中工作。

在boot2docker VM中。
或者在一个完整的Linux主机。

我在eclipse和Docker版本1.10.3上遇到了同样的问题,在寻求解决方法之前,我曾经search过一个解决scheme – 使用docker CLI docker-manager创build一个新的virtualbox,并获得DOCKER_HOSTDOCKER_CERT_PATH值virtualbox并创build一个新的构build器。

在我的情况下:我使用docker CLI命令创build了一个虚拟框default2 docker-machine create -d virtualbox default2

Docker CLI

 $ docker-machine env export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.103:2376" export DOCKER_CERT_PATH="/Users/XXXX/.docker/machine/machines/default2" export DOCKER_MACHINE_NAME="default2" 

docker客户端JAVA

 DockerCertificates defaultCertificates = new DockerCertificates(Paths.get("/Users/XXXX/.docker/machine/machines/default2")); DockerClient docker = DefaultDockerClient.builder() .uri("https://192.168.99.103:2376") .dockerCertificates(defaultCertificates) .build();