You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让POSTGRES_PASSWORD在重启PostgreSQL Docker容器时生效?

解决Docker容器重启时更新PostgreSQL管理员密码的方法

默认情况下,PostgreSQL官方Docker镜像的POSTGRES_PASSWORD环境变量仅在**首次初始化数据库(数据目录为空)**时生效,后续重启容器修改该变量不会更新密码。要实现每次重启都更新管理员密码,可通过以下两种常用方法:

方法一:自定义启动脚本覆盖入口点

  1. 创建一个名为start-postgres.sh的脚本,内容如下:
#!/bin/bash
set -e

# 修改postgres用户密码
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
    ALTER USER $POSTGRES_USER WITH PASSWORD '$POSTGRES_PASSWORD';
EOSQL

# 执行官方镜像的原始入口命令
exec docker-entrypoint.sh postgres
  1. 给脚本添加执行权限:chmod +x start-postgres.sh
  2. 运行容器时挂载该脚本并指定为入口点:
docker run -d \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=new-password \
  -v /path/to/your/start-postgres.sh:/start-postgres.sh \
  -v postgres-data:/var/lib/postgresql/data \
  --entrypoint /start-postgres.sh \
  postgres:latest

每次重启容器时,修改POSTGRES_PASSWORD环境变量的值,脚本就会自动更新管理员密码。

方法二:在启动命令中追加密码修改操作

无需自定义脚本,直接通过sh -c组合执行密码修改命令和PostgreSQL启动命令:

docker run -d \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=new-password \
  -v postgres-data:/var/lib/postgresql/data \
  postgres:latest \
  sh -c "psql -U \$POSTGRES_USER -d \$POSTGRES_DB -c \"ALTER USER \$POSTGRES_USER WITH PASSWORD '\$POSTGRES_PASSWORD';\" && exec postgres"

这种方式更简洁,每次重启时更新POSTGRES_PASSWORD的值即可生效。

注意事项

  • 确保POSTGRES_USER和POSTGRES_DB环境变量正确设置(默认值分别为postgres和postgres)。
  • 若使用Docker Compose,只需将上述命令或脚本配置到command或entrypoint字段中即可。

内容的提问来源于stack exchange,提问作者Math-dude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:05:01