Windows10部署CogStack NiFi时samples-db未填充且报root角色不存在错误
问题产生原因
- 手动执行脚本报错的直接原因:你进入容器时默认使用
root系统用户执行init_db.sh,脚本内调用的psql命令默认会将当前系统用户名作为数据库登录角色,而PostgreSQL数据库默认初始化的管理角色是postgres,不存在root角色,因此直接触发权限报错。 - 容器自动初始化未执行的核心原因有两类:
- 持久化卷残留问题:PostgreSQL官方镜像的初始化逻辑为仅在数据目录为空时执行初始化脚本,如果你此前已经启动过一次
samples-db容器,即使第一次启动失败,已经生成的持久化数据目录会被识别为非空,后续重启容器时会直接跳过所有初始化步骤,不会执行init_db.sh。 - Windows环境挂载权限问题:Docker Desktop在Windows环境下挂载宿主机脚本时,可能会出现脚本可执行权限丢失、挂载文件读取失败的问题,导致容器启动阶段无法正常执行映射的
init_db.sh脚本,样本数据自然不会写入。
- 持久化卷残留问题:PostgreSQL官方镜像的初始化逻辑为仅在数据目录为空时执行初始化脚本,如果你此前已经启动过一次
- 脚本设计的隐含缺陷:
init_db.sh中没有显式指定psql命令的登录用户参数-U postgres,完全依赖执行用户的身份匹配数据库角色,只要执行脚本的用户不是postgres,就会触发角色不存在的报错,不管是自动执行阶段还是手动执行阶段都会受影响。
内容的提问来源于stack exchange,提问作者user1610132
相关产品推荐
相关产品推荐

