Spring的WebClient从根本上使用Netty来访问Unix域套接字。我试图使其访问/var/run/docker.sock
,以便我可以根据需要使用/services
使用API进行操作,而docker-java库不支持该操作。
我当前的解决方法是创建一个socat容器,该容器将Docker套接字暴露给内部网络中的TCP,从而使我可以使用WebClient的HTTP连接。
尽管考虑到这一点,拥有这种变通办法的好处是不需要在管理器节点上放置更大的Java应用程序。
但是,我仍然很好奇如何连接到unix域文件。
答案 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。