如何让POSTGRES_PASSWORD在重启PostgreSQL Docker容器时生效?
解决Docker容器重启时更新PostgreSQL管理员密码的方法
默认情况下,PostgreSQL官方Docker镜像的POSTGRES_PASSWORD环境变量仅在**首次初始化数据库(数据目录为空)**时生效,后续重启容器修改该变量不会更新密码。要实现每次重启都更新管理员密码,可通过以下两种常用方法:
方法一:自定义启动脚本覆盖入口点
- 创建一个名为
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
- 给脚本添加执行权限:
chmod +x start-postgres.sh - 运行容器时挂载该脚本并指定为入口点:
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
相关产品推荐
相关产品推荐

