【发布时间】:2022-11-30 10:22:24
【问题描述】:
我使用 Docker Compose 和文件内容设置了 PostgreSQL(撰写.yaml)是这样的:
name: postgres-container
services:
database:
image: postgres
restart: always
environment:
- POSTGRES_PASSWORD
// OR POSTGRES_PASSWORD = ${POSTGRES_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
我在终端内运行docker compose up 命令,然后在初始化服务器和数据库后,我尝试使用psql -h localhost -U postgres 连接到 PostgreSQL。
然后它提示我输入密码我在我的 .env 文件中输入了完全匹配的密码在我的项目文件夹中,但我仍然无法进入 PostgreSQL 服务器并给了我错误。
psql: error: connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: password authentication failed for user "postgres"
connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: password authentication failed for user "postgres"
下面是我的 .env 文件:
# When adding additional env variables, the schema in /env/schema.mjs should be updated accordingly
# Prisma
DATABASE_URL=postgres://postgres:postgres@localhost/crud?connect_timeout=10
# Next Auth
NEXTAUTH_SECRET=...
NEXTAUTH_URL=http://localhost:3000
# Next Auth Google Provider
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
# Next Auth Discord Provider
DISCORD_CLIENT_ID=...
DISCORD_CLIENT_SECRET=...
# PostgreSQL Auth
POSTGRES_PASSWORD=postgres
我该如何解决这个问题?我已经做了:
- 删除存储数据的卷
- 删除运行的容器
- 删除 PostgreSQL 映像
当我运行 docker compose convert 命令时,它给了我真正的价值:
name: postgres-container
services:
database:
environment:
POSTGRES_PASSWORD: postgres
image: postgres
networks:
default: null
restart: always
volumes:
- type: volume
source: pgdata
target: /var/lib/postgresql/data
volume: {}
networks:
default:
name: postgres-container_default
volumes:
pgdata:
name: postgres-container_pgdata
【问题讨论】:
-
如果您在本地计算机或 postgres 容器中运行
echo $POSTGRES_PASSWORD,它的值是否正确?我不知道你的.env文件是如何写入你的实际环境变量的 -
@ussu 当我运行
echo $POSTGRES_PASSWORD时,它没有给我任何输出,但我尝试运行docker compose convert命令,它给了我从 .env 文件中提取的真实值。我在问题中添加了它,以便您可以看到。 -
我想你可以尝试 exec 进入 postgres 容器并使用
\password postgres(用户名)来重置密码。只是为了确定,你从哪里运行 psql 命令? -
我在 WSL 内部、容器外部运行命令
-
你从哪里运行
psql?您刚启动的容器不应该给您留下可以运行它的提示。
标签: postgresql docker docker-compose psql