1

Spring 的 WebClient 底层使用访问 Unix 域套接字的 Netty。我正在尝试使其访问/var/run/docker.sock,以便我可以根据需要使用/servicesdocker-java 库不支持的 API 执行操作。

我目前的解决方法是创建一个 socat 容器,将 Docker 套接字公开给内部网络中的 TCP,这反过来又允许我使用 WebClient 的 HTTP 连接。

虽然想一想,但拥有这种解决方法的好处之一是不需要在管理器节点上放置更大的 Java 应用程序。

但是,我仍然很好奇如何连接到 unix 域案卷。

4

2 回答 2

1

您可以在此处按照有关 Unix 域套接字的文档创建 Netty HttpClient 。

import io.netty.channel.unix.DomainSocketAddress;
import reactor.netty.http.client.HttpClient;

HttpClient client = HttpClient.create()
                              .remoteAddress(() -> new DomainSocketAddress("/var/run/docker.sock")); 

然后你可以告诉 WebClient 像这样使用这个 HttpClient。

WebClient.builder()
         .clientConnector(new ReactorClientHttpConnector(client))
         .build();
于 2020-10-13T11:34:44.480 回答
0

您可以通过 TCP 公开 docker 守护程序并使用 REST API。

于 2019-02-10T01:08:47.977 回答