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

标签 postgresql docker

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

相关文章:

postgresql - 刷新postgres物化 View 的性能

postgresql - 创建仅对一个数据库具有授予权限的用户

python - 如何从 Python 3.7 docker 镜像运行 SSL_library_init()

docker - 带有 cloudflare SSL 的 jwilder/nginx-proxy 没有

django - 为什么在安装了官方Django Docker镜像后为什么不能 `docker exec`?

NGINX 反向代理因链接的 Docker 容器而失败

postgresql - 为什么我不能在这里使用 IF?

node.js - 如何使用 node.js 和 express 从数据库动态创建 html 表?

postgresql - 如何在 PostgreSQL 中获取所需时区的不同日期?

python - 使用Docker容器运行django应用失败