我正在通过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)
而且行之有效,双方都成功地看到了联系。