gpt4 book ai didi

postgresql - 来自另一个容器内部的 Docker 端口不匹配

转载 作者:行者123 更新时间:2023-11-29 14:09:22 25 4
gpt4 key购买 nike

我有一个简单的 2 个 docker 容器设置,一个用于数据库,一个用于 Web 服务。

我像这样启动 DB docker 容器:

docker run -d --name dbs.service -p 5434:5432 -e POSTGRES_DB=my_app -e POSTGRES_USER=my_user -e POSTGRES_PASSWORD=my_password postgres:9.6.2

这很好用。从本地主机,我也可以很好地连接到它(使用 pgcli 进行连接)

pgcli postgres://my_user:my_password@dbs.service:5434/my_app

现在我启动 Web 服务容器,它工作正常

docker run -d --name web.service --link dbs.service:dbs.service web-service:latest

但是问题来了。从容器内部,我无法使用端口5434连接到数据库,但我可以使用端口5432连接到数据库.

所以我登录到容器使用

docker exec -it web.service bash

现在可以了

pgcli postgres://my_user:my_password@dbs.service:5432/my_app

但这不是

pgcli postgres://my_user:my_password@dbs.service:5434/my_app

我不明白为什么它可以连接到 5432 而不能连接到 5434。有什么建议吗?

最佳答案

-p 5434:5432

此选项发布用于从 docker 主机外部访问您的容器的端口。主机将监听 5434 并将流量路由到容器的端口 5432。

但是,容器到容器的流量不使用它。容器到容器的流量只需要一个通用的 docker 网络。从那里,任何容器都可以与同一网络上的任何其他容器通信。使用的端口是容器监听端口,不是主机上发布的端口。您甚至不需要发布端口,其他容器就可以访问它。

关于postgresql - 来自另一个容器内部的 Docker 端口不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48066762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com