我在嘗試將 psql 放入一個 docker 組成的 postgres 影像時不斷遇到錯誤,該影像已轉發其埠。(當嘗試通過節點應用程式以編程方式訪問資料庫時,這個問題似乎也持續存在)。
docker-compose up -d在以下 docker compose 檔案上運行:
services:
postgres:
container_name: cnc-matches
image: postgres:12.1-alpine
ports:
- '5432:5432'
environment:
POSTGRES_USER: dbuser
POSTGRES_PASSWORD: pass
POSTGRES_DB: cnc-matches
運行 psql 以嘗試訪問它時,我不斷遇到以下錯誤:
C:\Users\danie\Desktop\dev\cnc-db\db-setup>psql -h "localhost" -p "5432" -U dbuser
Password for user dbuser: pass
psql: error: connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "dbuser"
運行 docker exec 時,我可以正常訪問表和資訊:
C:\Users\danie\Desktop\dev\cnc-db\db-setup>docker exec -it cnc-matches psql -U dbuser cnc-matches
psql (12.1)
Type "help" for help.
cnc-matches=# \du
List of roles
Role name | Attributes | Member of
----------- ------------------------------------------------------------ -----------
dbuser | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
我已經嘗試在此處使用 ALTER PASSWORD dbuser WITH PASSWORD 'pass' 創建一個新用戶以及更改 dbuser 組態檔密碼,但我仍然無法在本地使用默認的 psql 命令訪問資料庫。
cnc-matches=# CREATE USER tester WITH PASSWORD 'tester';
CREATE ROLE
cnc-matches=# \du
List of roles
Role name | Attributes | Member of
----------- ------------------------------------------------------------ -----------
dbuser | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
tester | | {}
C:\Users\danie\Desktop\dev\cnc-db\db-setup>psql -h "localhost" -p "5432" -U tester
Password for user tester: tester
psql: error: connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "tester"
如果通過 Windows 11 cmd 運行相關,不知道我在這里錯過了什么。任何幫助/建議表示贊賞。
uj5u.com熱心網友回復:
看起來您在連接到 Docker 容器中運行的資料庫時還需要包含資料庫名稱,例如
psql -h "0.0.0.0" -p "5432" -U dbuser cnc-matches
uj5u.com熱心網友回復:
如果容器啟動成功,嘗試運行:
psql -U dbuser -d cnc-matches -h 0.0.0.0 --port 5432
對于埠,請使用您在容器中映射到的任何內容;在您的情況下為 5432。
您必須明確指定所有這些,否則您將收到資料庫無法接受 TCP/IP 連接的錯誤。
uj5u.com熱心網友回復:
第一次發帖,如有格式錯誤請見諒。我使用網橋更新了您的 docker-compose 檔案,因為它仍然與主機的網路隔離。
腳步:
"db-net" 可以是你想要的任何名稱,但兩者都必須與你的 docker compose 檔案一致
- 使用以下命令創建一個 docker 網路: docker network create db-net
- 運行:docker-compose up -d
version: "3.9" services: postgresCNC: container_name: cnc-matches image: postgres:15.0-alpine ports: - '5432:5432' environment: POSTGRES_USER: dbuser POSTGRES_PASSWORD: pass POSTGRES_DB: cnc-matches networks: db-net: networks: db-net: driver: bridge
默認情況下,網橋使用硬體網路設備在容器和主機之間進行通信,就像容器與其他容器一樣。更多資訊: https ://docs.docker.com/network/bridge/
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/525412.html
