首页 > 解决方案 > 只能将 pgadmin 连接到端口 5432 上的 postgres docker 容器,而不能连接任何其他端口?

问题描述

我正在尝试将 PGAdmin 连接到 docker 容器,并发现这篇文章 ( https://stackoverflow.com/a/57729412/11923025 ) 对此非常有帮助。但我尝试使用 5432 以外的端口进行测试,但没有任何运气。

例如,我尝试在 docker-compose 文件中使用 5434,并尝试在 pgadmin 中使用该端口,但出现以下错误(这是使用 docker inspect 找到的 IP 地址)

pgadmin 错误

这就是我的 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 上遇到了同样的错误。

pgadmin 应用程序错误

标签: postgresqlmacosdockerdocker-composepgadmin-4

解决方案


您公开了容器的 5434 端口,但 PostgreSQL 本身仍配置为侦听端口 5432。这就是您无法访问数据库的原因。

在运行PostgreSQL 之后initdb和启动 PostgreSQL 之前,配置集群,例如使用

echo 'port = 5434' >> datadir/postgresql.auto.conf

但是应该不需要在不同的端口上启动 PostgreSQL。只需将端口 5432 映射到 5434。


推荐阅读