只能用5432端口连接pgadmin到postgres docker容器,而不能连接其他端口?

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

我试图将PGAdmin连接到一个docker容器上,并找到了这个帖子(https:/stackoverflow.coma5772941211923025。)非常有帮助,但我试着用5432以外的端口进行测试,却没有任何收获。但是我试着用5432以外的端口进行测试,却没有任何收获。

例如,我尝试在我的docker-compose文件中使用5434,并尝试在pgadmin中使用该端口,但得到了下面的错误信息(这是使用docker inspect发现的IP地址)。

pgadmin error

这是我的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:
      - [email protected]
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454

为什么pgadmin在使用5432端口时没有问题,但当我要求它使用其他端口时,它却抛出了这个错误?

我需要注意的是,上面截图中的错误来自于尝试将postgres容器连接到pgadmin容器。我还尝试了在我的pgadmin本地应用程序中连接到postgres容器,并得到了下面一个不同的超时错误。当我试图使用我的pgadmin的本地副本连接时,我甚至对5432端口也得到了这个相同的错误。

pgadmin app error

postgresql macos docker docker-compose pgadmin-4
2个回答
1
投票

你暴露了你的容器的5434端口,但PostgreSQL本身仍然配置为在5432端口上监听。这就是为什么你无法到达数据库的原因。

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

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

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


1
投票

PostgreSQL服务器监听的端口是5432。 只是在Docker级别的配置中改变一些东西,并不会改变服务器进程本身的监听位置。 也就是说。

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

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

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