使用gosu切换nobody用户运行Rails进程仍显示root权限问题咨询
修复方案
1. 给entrypoint的gosu命令添加exec前缀
你当前脚本中执行gosu时没有替换主进程,导致root身份的shell进程一直作为1号进程存在,修改docker-entrypoint.sh中的server分支代码:
server) # 加exec替换当前shell主进程,避免残留root身份的父进程 exec gosu nobody:nogroup bundle exec rails s -b 0.0.0.0 ;;
2. 给/srv目录配置nobody权限
你COPY到镜像内的代码默认归属root用户,nobody没有读写权限,会导致Rails启动失败,甚至静默回退到root运行。在Dockerfile的COPY . /srv步骤后添加权限配置:
COPY . /srv # 新增以下行 RUN chown -R nobody:nogroup /srv
3. 验证配置是否生效
容器启动后执行以下命令确认进程身份:
# 查看容器1号进程的身份 docker exec -it 你的容器ID ps -p 1 -o user,cmd
正常输出的user列应为nobody,cmd列是rails启动命令。
可选优化
你添加的RUN chsh -s /bin/bash nobody配置不需要保留,gosu切换用户无需用户拥有可登录的shell,可以删除该行减少不必要的配置。
内容的提问来源于stack exchange,提问作者Faisal Shani
相关产品推荐
相关产品推荐

