【问题标题】:How do we connect Spring WebClient to a Unix Domain Socket?我们如何将 Spring WebClient 连接到 Unix Domain Socket?
【发布时间】:2019-07-02 10:26:22
【问题描述】:

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

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

尽管仔细想想,这种解决方法的一个好处是不需要在管理器节点上放置更大的 Java 应用程序。

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

【问题讨论】:

  • 我也很好奇这是否可能。

标签: spring docker spring-webflux reactor-netty


【解决方案1】:

你可以创建一个Netty HttpClient following their documentation regarding Unix Domain Sockets here.

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();

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这就是我所做的(第二段是我的解决方法),我试图避免这种情况
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多