Docker Compose 内请求连接被拒绝。

7
我在我的主机上的8000端口上运行着一个API。同时,我有一个Docker Compose集群,其中只有一个容器应该连接到该API。为了获取请求的URL,我在Windows机器上使用“host.docker.internal:8000”,它非常有效。然而,我有一个Linux部署服务器,在那里,“host.docker.internal”无法解析任何内容,导致与API的连接错误。我在另一篇stackoverflow文章中看到,在Linux上通过在docker-compose.yaml中添加以下内容来解决这个问题。
services:
  service_name:
    extra_hosts:
      - host.docker.internal:host-gateway

这将docker0 IP添加到/etc/hosts,但当我尝试进行GET请求时,出现以下错误信息:Failed to connect to host.docker.internal port 8000: Connection refused。我真的很困惑,不知道是防火墙问题、Docker问题、Docker Compose问题还是Linux上的Docker问题。请帮忙...

11
请确保您的API绑定到0.0.0.0而不是localhost。如果它绑定到localhost,它将无法接受来自容器的连接。 - Hans Kilian
@Eddysanoli,能否告诉我们您具体是怎么做到让它工作的呢? - cheack
之前我的API在本地监听请求。将API更改为侦听0.0.0.0后,一切都按照上述设置正常工作。 - Eddysanoli
不好意思,如果我有更新的话会在这里更新。我们仍在努力让我们的应用程序在Linux机器上运行,似乎Docker处理网络的方式在OSX和Linux发行版上有所不同。 - Caleb Jay
1
在我的情况下,将绑定地址设置为0.0.0.0并没有解决问题,但将其设置为127.0.0.1却有效。我将这个信息留在这里,以防对其他人有所帮助。 - undefined
显示剩余3条评论
2个回答

13

感谢 @Hans Kilian:

  • 在docker-compose文件中添加extra_hosts
  • 将URL更改为使用host.docker.internal而不是localhost
  • 将服务更改为侦听0.0.0.0而不是localhost

7
我曾经遇到了类似的问题,并通过确保我的隧道接受来自任何位置的连接来解决它。
之前:
ssh -N -L 5435:endpoint.rds.amazonaws.com:5432 admin@machine.ip

之后:

ssh -N -L 0.0.0.0:5435:endpoint.rds.amazonaws.com:5432 admin@machine.ip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接