如何从Docker主机连接在Docker容器上运行的套接字服务器

时间:2019-12-06 05:21:39

标签: docker sockets

我的计算机Windows 10上有“适用于Windows的Docker”。

我通过docker启动Selenium网格,如下所示:

docker run -d --name my-hub selenium/hub
docker run -d --name my-firefox -e HUB_HOST=my-hub -v c:/seleniumplus:/dev/seleniumplus selenium/node-firefox
docker run -d --name my-chrome -e HUB_HOST=my-hub -v c:/seleniumplus:/dev/seleniumplus selenium/node-chrome

我获得了容器“ my-firefox”和“ my-chrome”的IP地址,分别是172.17.0.3和172.17.0.4

docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" my-firefox
docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" my-chrome

我可以从Docker主机(我的计算机Windows 10)ping IP 172.17.0.3和172.17.0.4。

我在端口9876的容器“ my-firefox”上运行套接字服务器,然后尝试通过从Docker主机(我的计算机Windows 10)创建new Socket(172.17.0.3, 9876)来建立与服务器的套接字连接,此操作失败有错误 线程“ main”中的异常java.net.ConnectException:连接超时:connect

有人知道这是怎么回事吗?如何运作?我不想使用端口转发,是的,我们可以将容器的端口9876映射到Docker主机的端口(例如9876),如下所示:

docker run -d -p 9876:9876 --name my-firefox -e HUB_HOST=my-hub -v c:/seleniumplus:/dev/seleniumplus selenium/node-firefox

然后我们可以通过new Socket("localhost", 9876)

建立连接

顺便说一句,我进行了其他一些测试: 我在容器“ my-firefox”的端口9876上运行套接字服务器,然后尝试从另一个容器“ my-chrome”(172.17.0.4)建立到(172.17.0.3,9876)的套接字连接,并且成功。

我在端口9876的docker主机(我的机器Windows 10,其IP为172.27.20.204的Windows 10机器)上运行套接字服务器,然后尝试从一个容器(“ my-”连接到(172.27.20.204,9876) chrome”或“ my-firefox”)成功。

0 个答案:

没有答案