![](/img/trans.png)
[英]How can I connect to Postgres database in the container via port 5432
[英]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 地址)
這就是我的 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。這就是您無法訪問數據庫的原因。
在運行initdb
之后和啟動 PostgreSQL 之前,配置集群,例如
echo 'port = 5434' >> datadir/postgresql.auto.conf
但是應該沒有必要在不同的端口上啟動 PostgreSQL。 只需 map 端口 5432 到 5434。
PostgreSQL 服務器偵聽端口 5432。僅更改 Docker 級別配置中的內容不會更改服務器進程本身偵聽的位置。 這意味着:
ports:
必須是 5432。(第一個數字可以是您想要的任何數字。)ports:
被忽略且不是必需的。)expose:
一個端口,它也必須是5432。(這個沒有實際作用,重復了EXPOSE 5432
中的EXPOSE 5432。)由於每個容器都在隔離的網絡命名空間中運行,因此沒有特別的理由要更改它。 你可以運行多個數據庫容器,每個容器都有自己獨立的容器端口 5432; 他們不會沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.