postgresql - 只能将 pgadmin 连接到端口 5432 上的 postgres docker 容器,而不能连接任何其他端口?
问题描述
我正在尝试将 PGAdmin 连接到 docker 容器,并发现这篇文章 ( https://stackoverflow.com/a/57729412/11923025 ) 对此非常有帮助。但我尝试使用 5432 以外的端口进行测试,但没有任何运气。
例如,我尝试在 docker-compose 文件中使用 5434,并尝试在 pgadmin 中使用该端口,但出现以下错误(这是使用 docker inspect 找到的 IP 地址)
这就是我的 docker-compose 文件的样子(我故意将不同的端口用于“公开”和“端口”,以尝试缩小允许我通过 PGAdmin 连接的端口,但我没有运气
database:
image: postgres:10.4-alpine
container_name: kafka-nodejs-example-database
environment:
POSTGRES_USER: "abcdef"
POSTGRES_PASSWORD: "abcdef"
expose:
- "5435"
ports:
- 8000:5434
pgadmin:
image: dpage/pgadmin4
ports:
- 5454:5454/tcp
environment:
- PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
- PGADMIN_DEFAULT_PASSWORD=postgres
- PGADMIN_LISTEN_PORT=5454
为什么 pgadmin 对 5432 没有问题,但是当我要求它使用另一个端口时,它会抛出此错误?
我应该注意,上面屏幕截图中的错误是尝试将 postgres 容器连接到 pgadmin 容器。我还尝试在我的本地 pgadmin 应用程序中连接到 postgres 容器,并在下面得到不同的超时错误。在尝试使用我的本地 pgadmin 副本进行连接时,我什至在端口 5432 上遇到了同样的错误。
解决方案
您公开了容器的 5434 端口,但 PostgreSQL 本身仍配置为侦听端口 5432。这就是您无法访问数据库的原因。
在运行PostgreSQL 之后initdb
和启动 PostgreSQL 之前,配置集群,例如使用
echo 'port = 5434' >> datadir/postgresql.auto.conf
但是应该不需要在不同的端口上启动 PostgreSQL。只需将端口 5432 映射到 5434。
推荐阅读
- c - 从 jansson 库创建 json 请求时释放内存的正确方法是什么?
- html - 缩放没有纵横比的 SVG 图像
- html - 显示单元格宽度:表格
- python - 创建字典并使用相应的键聚合值
- azure - Azure 逻辑应用:在 Blob 中创建 CSV 文件
- ssl-certificate - Atlassian Bitbucket (Stash) SSL 证书续订
- selenium - 一个类中提到的 TestNg 注释是如何从另一个类的另一个类中执行的?
- python - 如何解释 tensorflow 中 tf.rank 的输出
- jquery - 找到最大数量的 tr
- javascript - 如何将丢失的对象添加到数组中?