Docker启动容器时无法创建PostgreSQL角色问题咨询
Docker PostgreSQL容器初始化创建root角色失败的原因
脚本执行时机不对:官方PostgreSQL镜像启动时会先完成数据库初始化流程,这个阶段PostgreSQL服务并未完全就绪。如果你的
pgsql.sh脚本通过CMD、RUN等指令在容器启动初期执行,此时尝试连接数据库创建角色,会因服务未启动而失败。而docker exec进入容器时,服务已经完全运行,所以命令能正常执行。未利用官方镜像的初始化机制:官方PostgreSQL镜像会自动执行
/docker-entrypoint-initdb.d/目录下的.sh、.sql类脚本,但仅在首次初始化数据库(即挂载的数据卷为空)时触发。如果你的脚本没放在这个目录,而是用自定义命令触发,很可能在数据库未完成初始化时就运行了。环境变量或连接方式错误:如果脚本中直接尝试用
root角色连接未初始化的数据库,或者未使用镜像默认的POSTGRES_USER(通常是postgres)进行连接操作,会因权限或用户不存在导致失败。手动执行时,你大概率是先以默认的postgres用户进入数据库后再创建角色,所以能成功。脚本权限不足:如果
pgsql.sh脚本没有设置可执行权限(未执行chmod +x pgsql.sh),容器启动时无法执行该脚本,但手动进入容器后你可能直接输入命令或临时赋予了权限,因此操作成功。
内容的提问来源于stack exchange,提问作者user2274074
相关产品推荐
相关产品推荐

