来自Docker容器的TCP客户端连接

时间:2019-10-31 15:21:27

标签: docker networking tcp docker-desktop

我正在通过Docker桌面在Mac OSX(高Sierra)上运行Docker容器。

我的容器正在运行CentOS 7.5.1804,以及一堆我的自定义代码。该代码具有GUI,因此我使用X11转发进行管理,并且将其安装到主机上的特定目录(所有这些都很好用)。

我的docker run命令当前为:

docker run -d -t -e DISPLAY=host.docker.internal:0 --mount type=bind,source=$HOME/some_dir,target=/some_dir image_name

在容器运行后,如果我登录到它,则可以毫无问题地创建一个TCP服务器(通过Ruby的TCPServer类),然后在该容器上使用TCP客户端(通过Ruby的TCPSocket类)连接到该服务器。主办。但是,如果我在主机上创建TCP服务器,则容器中的TCP客户端将无法连接(就像网络流量是1路)。

最终,我在主机可以与之交谈的计算机上拥有一个数据源,该计算机创建了一个TCP Server来分发数据。我想让容器启动一个TCP客户端,然后连接到该服务器(可能通过主机上的SSH隧道),但是我无法使它正常工作。

我已经在docker run命令中尝试了以下几种组合,但似乎没有任何效果,因此我认为我缺少有关Docker网络的一些基本知识。

--network host
--add-host="localhost:<my_ip>"
-p 5555:5555

在此先感谢您的帮助/建议!


我能够弄清楚该怎么做。

关键是在Mac上,您需要连接到不断变化的IP地址才能访问主机。

Docker 17.06及更高版本支持主机名“ docker.for.mac.localhost”,它将解析为正确的IP地址。

这意味着在我的容器中,我的TCP客户端将如下所示:

TCPSocket(docker.for.mac.localhost, 5555)

主机TCP服务器如下所示:

TCPServer(5555)

而且行之有效,双方都成功地看到了联系。

0 个答案:

没有答案