簡體   English   中英

只能將 pgadmin 連接到端口 5432 上的 postgres docker 容器,但不能連接任何其他端口?

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

我正在嘗試將 PGAdmin 連接到 docker 容器並發現這篇文章( https://stackoverflow.com/a/57729412/11923025 )對此非常有幫助。 但我嘗試使用 5432 以外的端口進行測試,但沒有任何運氣。

例如,我嘗試在我的 docker-compose 文件中使用 5434,並嘗試在 pgadmin 中使用該端口,但出現以下錯誤(這是使用 Z05B6053C41A2130AFD6ZFC3B158BDA4E6 檢查找到的 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 應用程序錯誤

您暴露了容器的端口 5434,但 PostgreSQL 本身仍配置為偵聽端口 5432。這就是您無法訪問數據庫的原因。

在運行initdb之后和啟動 PostgreSQL 之前,配置集群,例如

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

但是應該沒有必要在不同的端口上啟動 PostgreSQL。 只需 map 端口 5432 到 5434。

PostgreSQL 服務器偵聽端口 5432。僅更改 Docker 級別配置中的內容不會更改服務器進程本身偵聽的位置。 這意味着:

  • ports:必須是 5432。(第一個數字可以是您想要的任何數字。)
  • 來自其他 Docker 容器的連接必須連接到端口 5432。( ports:被忽略且不是必需的。)
  • 如果你expose:一個端口,它也必須是5432。(這個沒有實際作用,重復了EXPOSE 5432中的EXPOSE 5432。)

由於每個容器都在隔離的網絡命名空間中運行,因此沒有特別的理由要更改它。 你可以運行多個數據庫容器,每個容器都有自己獨立的容器端口 5432; 他們不會沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM