2015-07-03 1 views
3

Я новичок в докере, и я хочу использовать java api для печати информации о докере. Затем я нахожу Api в этом link о докер-джаве. И я обнаружил, что мой boot2docker ip равен 196.168.59.103:2376. И я использую эту команду:Как использовать docker-java API для подключения докеров?

docker -H tcp://192.168.59.103:2376 version 

Он может добиться успеха и показать мне эту информацию:

Client version: 1.7.0 
Client API version: 1.19 
Go version (client): go1.4.2 
Git commit (client): 0baf609 
OS/Arch (client): darwin/amd64 
Server version: 1.7.0 
Server API version: 1.19 
Go version (server): go1.4.2 
Git commit (server): 0baf609 
OS/Arch (server): linux/amd64 

Затем я новый в Maven проект в затмении, и запустить этот код:

public static void main(String[] args) { 
     DockerClient dockerClient = DockerClientBuilder.getInstance("http://192.168.59.103:2376").build(); 
     Info info = dockerClient.infoCmd().exec(); 
     System.out.print(info); 
    } 

Но это вообще не сработало и исключение:

The server failed to respond with a valid HTTP response 

И, я использую команду завиток для подключения:

curl -v http://192.168.59.103:2376/info 

Он показывает мне информацию ниже:

* Hostname was NOT found in DNS cache 
* Trying 192.168.59.103... 
* Connected to 192.168.59.103 (192.168.59.103) port 2376 (#0) 
> GET /info HTTP/1.1 
> User-Agent: curl/7.37.1 
> Host: 192.168.59.103:2376 
> Accept: */* 
> 

* Connection #0 to host 192.168.59.103 left intact 

Как я должен делать в этом случае? Я хочу использовать это, чтобы показать некоторую информацию о докере и сделать что-то докере, используя код Java. более подробно Java исключение:

Exception in thread "main" javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException 
    at org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:513) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:246) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:683) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:679) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:408) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:308) 
    at com.github.dockerjava.jaxrs.InfoCmdExec.execute(InfoCmdExec.java:26) 
    at com.github.dockerjava.jaxrs.InfoCmdExec.execute(InfoCmdExec.java:12) 
    at com.github.dockerjava.jaxrs.AbstrDockerCmdExec.exec(AbstrDockerCmdExec.java:57) 
    at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:29) 
    at org.v11.dm.docker.Demo.main(Demo.java:15) 
Caused by: org.apache.http.client.ClientProtocolException 
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:188) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) 
    at org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:465) 
    ... 14 more 
Caused by: org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response 
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:151) 
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57) 
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260) 
    at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:161) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.http.impl.conn.CPoolProxy.invoke(CPoolProxy.java:138) 
    at com.sun.proxy.$Proxy19.receiveResponseHeader(Unknown Source) 
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:271) 
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123) 
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:253) 
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194) 
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85) 
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) 
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) 
    ... 16 more 
+0

Должно ли это быть https? – McDowell

+0

@McDowell Вы имеете в виду использование DockerClientBuilder.getInstance ("https://192.168.59.103:2376")? Это не сработало. Просто исключение: https-протокол не поддерживается – v11

ответ

0

Ваш код работает для меня.

У меня есть следующие настройки -

  1. Docker демон работает с этой командой -

    /usr/bin/docker -d -H fd:// -H tcp://0.0.0.0:2375

  2. Я могу свернуться -

    curl http://localhost:2375/info

  3. Также можно запускать свой код.

ПРИМЕЧАНИЕ

Если вы используете boot2docker, пожалуйста, проверьте, как работает демон и его принятия запроса HTTP. Если он работает с TLSVerify, остановите его и запустите, как я упомянул на первом этапе.