我的主机上有一个 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问题。请帮忙...
感谢@Hans Kilian:
extra_hosts
添加到 docker-compose 文件host.docker.internal
而不是 localhost
0.0.0.0
而非 localhost
我遇到了类似的问题,并通过确保我的隧道接受来自任何地方的连接来使其正常工作。
之前:
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]
以防万一有人遇到类似的问题,如果您的容器之一有 wsgi/usgi 服务器(uvicorn、gunicorn 等),请确保无论您在何处启动此类 Web 服务器,都可以尝试为两者设置任何绑定参数或主机参数
127.0.0.1
和 0.0.0.0
例如,在我的 fastapi 服务器中,当我执行 uvicorn.run 时,我必须传递
0.0.0.0
,以便其他容器能够与其交互,不传递任何内容或其他内容都没有帮助。