只能将 pgadmin 连接到端口 5432 上的 postgres docker 容器,而不能连接任何其他端口?

Can only connect pgadmin to postgres docker container on port 5432, but not any other port?

我正在尝试将 PGAdmin 连接到 docker 容器,并发现此 post () 对此非常有帮助。但我已经尝试使用 5432 以外的端口进行测试,但运气不佳。

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

这就是我的 docker-compose 文件的样子(我故意为 'expose' 和 'ports' 使用不同的端口,以尝试缩小允许我使用的端口范围通过 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。这就是您无法访问数据库的原因。

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

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

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

PostgreSQL 服务器在端口 5432 上侦听。仅更改 Docker 级配置中的内容不会更改服务器进程本身侦听的位置。这意味着:

  • ports:中的第二个数字必须是5432。(第一个数字可以是你想要的任何数字。)
  • 来自其他 Docker 容器的连接必须连接到端口 5432。(ports: 被忽略并且不是必需的。)
  • 如果你 expose: 一个端口,它也必须是 5432。(这没有实际效果并且在 Docker 文件中重复 EXPOSE 5432。)

因为每个容器 运行 都在一个独立的网络命名空间中,所以没有特别的理由想要改变它。您可以 运行 多个数据库容器,每个容器都有自己独立的容器端口 5432;他们不会冲突。