我们如何将Spring WebClient连接到Unix域套接字?

时间:2019-02-08 07:49:56

标签: spring docker spring-webflux reactor-netty

Spring的WebClient从根本上使用Netty来访问Unix域套接字。我试图使其访问/var/run/docker.sock,以便我可以根据需要使用/services使用API​​进行操作,而docker-java库不支持该操作。

我当前的解决方法是创建一个socat容器,该容器将Docker套接字暴露给内部网络中的TCP,从而使我可以使用WebClient的HTTP连接。

尽管考虑到这一点,拥有这种变通办法的好处是不需要在管理器节点上放置更大的Java应用程序。

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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