Postgresql 另一个容器内的Docker端口不匹配

Postgresql 另一个容器内的Docker端口不匹配,postgresql,docker,Postgresql,Docker,我有两个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 这个很好用。从localhost,我也可以很好地连接到它(使用pgcli进行连接) 现在,我启动web

我有两个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
这个很好用。从localhost,我也可以很好地连接到它(使用pgcli进行连接)

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

docker run -d --name web.service --link dbs.service:dbs.service web-service:latest
然而,问题出在这里。从容器内部,我无法使用端口5434连接到DB,但我可以使用端口5432连接到DB

所以我使用

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网络。从那里,任何容器都可以与同一网络上的任何其他容器通信。使用的端口是容器侦听端口,而不是主机上已发布的端口。您甚至不需要发布端口,就可以让其他容器访问它

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


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

您在哪里运行问题中的第一个
pgcli
命令?在主机上?在
dbs.service
容器内?其他地方?在本地主机上,您在哪里运行问题中的第一个
pgcli
命令?在主机上?在
dbs.service
容器内?其他地方?在本地主机上,这是正确的答案。我将用Docker的网络文档来补充这一点:这是正确的答案。我将用Docker的网络文档对此进行补充:
-p 5434:5432