You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:54:06