Docker Compose 内部的请求被拒绝连接

问题描述 投票:0回答:3

我的主机上有一个 API 在端口 8000 上运行。同时,我有一个 docker compose 集群,其中有一个容器应该连接所述 API。为了获取请求的 url,我在 Windows 计算机上使用“host.docker.internal:8000”,效果非常好。但是,我有一个 Linux 部署服务器,其中“host.docker.internal”无法解析任何内容,导致 API 连接错误。我在 stackoverflow 上的另一篇帖子上看到,您可以通过在

docker-compose.yaml

上添加以下内容来解决 Linux 上的问题
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问题、docker on linux问题。请帮忙...

linux docker docker-compose deployment
3个回答
15
投票

感谢@Hans Kilian:

  • extra_hosts
    添加到 docker-compose 文件
  • 更改 URL 以使用
    host.docker.internal
    而不是
    localhost
  • 将服务更改为在
    0.0.0.0
    而非
    localhost
  • 上提供服务

7
投票

我遇到了类似的问题,并通过确保我的隧道接受来自任何地方的连接来使其正常工作。

之前:

ssh -N -L 5435:endpoint.rds.amazonaws.com:5432 [email protected]

之后:

ssh -N -L 0.0.0.0:5435:endpoint.rds.amazonaws.com:5432 [email protected]

0
投票

以防万一有人遇到类似的问题,如果您的容器之一有 wsgi/usgi 服务器(uvicorn、gunicorn 等),请确保无论您在何处启动此类 Web 服务器,都可以尝试为两者设置任何绑定参数或主机参数

127.0.0.1
0.0.0.0

例如,在我的 fastapi 服务器中,当我执行 uvicorn.run 时,我必须传递

0.0.0.0
,以便其他容器能够与其交互,不传递任何内容或其他内容都没有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.