Клиент Java Docker в тесте JUnit не может подключиться к демону
Я пытаюсь автоматически управлять своим приложением в контейнере Docker с помощью Spotify Docker Client для моих интеграционных тестов с Docker для Mac.
DockerClient docker = new DefaultDockerClient.fromEnv().build();
HostConfig hostConfig = HostConfig.builder()
.portBindings(new HashMap<String, List<PortBinding>>(){{
put("8080", Arrays.asList(PortBinding.of("localhost", 8080)));
}}).build();
ContainerConfig containerConfig = ContainerConfig.builder()
.hostConfig(hostConfig)
.exposedPorts("8080")
.image("my-app")
.portSpecs(Arrays.asList("8080:8080"))
.build();
ContainerCreation createdContainer = docker.createContainer(containerConfig);
createContainer
вызов не удался:
2091 [jersey-client-async-executor-0] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection request: [route: {}->unix://localhost:80][total kept alive: 0; route allocated: 0 of 100; total allocated: 0 of 100]
2091 [jersey-client-async-executor-0] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection leased: [id: 1][route: {}->unix://localhost:80][total kept alive: 0; route allocated: 1 of 100; total allocated: 1 of 100]
2091 [jersey-client-async-executor-0] DEBUG org.apache.http.impl.execchain.MainClientExec - Opening connection {}->unix://localhost:80
2456 [jersey-client-async-executor-0] DEBUG org.apache.http.impl.conn.DefaultHttpClientConnectionOperator - Connecting to localhost/127.0.0.1:80
2476 [jersey-client-async-executor-0] DEBUG org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-1: Shutdown connection
2516 [jersey-client-async-executor-0] DEBUG org.apache.http.impl.execchain.MainClientExec - Socket is not connected
java.io.IOException: Socket is not connected
at jnr.enxio.channels.NativeSocketChannel.shutdownInput(NativeSocketChannel.java:102)
at com.spotify.docker.client.ApacheUnixSocket.shutdownInput(ApacheUnixSocket.java:280)
at com.spotify.docker.client.ApacheUnixSocket.close(ApacheUnixSocket.java:273)
...
Из-за какой-то странности, где упоминается трассировка стека unix://localhost:80
, под капотом он на самом деле использует URL-адрес сокета unix:///var/run/docker.sock
, Я подтвердил это, пройдя через отладчик.
В противном случае Docker работает отлично; Я могу подключиться к сокету через 'curl' и нормально использовать докер через терминал.