如何修复在运行两个Docker容器时无法建立新连接的问题?

时间:2019-01-28 23:16:02

标签: python-3.x docker

  

HTTPConnectionPool(host ='localhost',port = 5000):URL超过最大重试次数:/ xyz / 123 /(由NewConnectionError(':导致:无法建立新连接:[Errno -2]名称或服务未成功已知”,))

我查看了很多包含此错误的堆栈溢出问题,但没有一个与我的确切问题相符。

我在从一个Docker容器向另一个Docker容器发送发布请求时收到上述错误。我的第一个容器在端口8000上运行,第二个容器在端口5000上运行。另外,我的第一个容器通过docker-compose运行,第二个容器通过docker run运行,并且不使用docker-compose文件。是什么导致此错误,您将如何解决它?预先感谢。

编辑: 我已将发布网址更改为我的Docker容器IE的名称。 http://festive_hugle/xyz/123/

2 个答案:

答案 0 :(得分:1)

默认情况下,docker-compose为您正在运行的服务创建专用网络。当您使用docker run运行docker实例并且未指定应在哪个网络中运行时,它将在default网络上运行。
这可能是问题所在,您可以通过在docker-compose网络上运行不使用compose的docker实例来解决此问题。 要获取网络名称,您可以运行

docker inspect <compose_container_id> | grep -i "NetworkMode"   

一旦获得网络名称,就可以运行容器,连接到网络并链接组成实例的服务。

docker run -it --network <network_name> --link <compose_container_name>  <docker_image>

另一方面,我不知道为什么您粘贴的错误显示您正在尝试连接到本地主机。

  

HTTPConnectionPool(host ='localhost',port = 5000)
  如果要连接到主机映射的端口,则必须指定连接到容器网络的主机ip。

我希望您觉得这有用。

答案 1 :(得分:0)

我知道了。我必须更改以下内容:

  1. 通过docker run -d --net network_name img_name在同一网络上运行第二个docker容器
  2. 运行docker inspect以获取容器ip地址:docker inspect container_id
  3. 将发布主机名更改为容器ip地址,并包括容器运行所在的端口。 http://172.20.0.5:5000/xyz/123/

这样做可以使第一个容器向第二个容器发送发布请求。