如何创建自动生成目录的PostgreSQL扩展镜像?解决权限拒绝问题
解决PostgreSQL容器启动时创建目录权限拒绝问题
方法1:使用postgres用户有权限的路径修改脚本
修改postgres_entrypoint.sh中的mkdir命令,指定postgres用户有权限写入的绝对路径(比如用户家目录):
#!/bin/bash mkdir -p /home/postgres/vorvault/nfsshare ; # other code lines not mentioned
方法2:在构建镜像时提前创建目录并修改权限
在Dockerfile中添加创建目录并设置权限的步骤,确保postgres用户拥有该目录的读写权限:
FROM postgres:14 ENV POSTGRES_USER=postgres ENV POSTGRES_PASSWORD=abcd1234 # 提前创建目录并修改归属为postgres用户 RUN mkdir -p /vorvault/nfsshare && chown -R postgres:postgres /vorvault COPY postgresql.conf /etc/postgresql/postgresql.conf COPY postgres_entrypoint.sh /docker-entrypoint-initdb.d/ CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]
容器启动时,postgres用户就能正常写入该目录,原脚本无需修改。
问题原因说明
postgres官方镜像默认以postgres用户身份运行初始化脚本和后续服务,容器默认工作目录是/,该目录的所有权是root用户,postgres用户没有权限在其中创建新目录。
内容的提问来源于stack exchange,提问作者Pavan Varyani
相关产品推荐
相关产品推荐

