Docker端口与另一个容器内部不匹配

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

我有一个简单的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

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

pgcli postgres://my_user:[email protected]:5434/my_app

现在我启动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:[email protected]:5432/my_app

但事实并非如此

pgcli postgres://my_user:[email protected]:5434/my_app

我无法理解为什么它可以连接到5432而不是5434.有什么建议吗?

postgresql docker
1个回答
4
投票
-p 5434:5432

此选项发布端口,以便从docker主机外部访问您的容器。主机将在5434上侦听并将流量路由到容器的端口5432。

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

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