Ruby on rails 如何在没有root用户的情况下运行RubyonRails的docker容器?
我正在尝试在docker上没有根用户的情况下运行RoR项目。我使用的是正式的ruby映像,当我使用非root用户执行Ruby on rails 如何在没有root用户的情况下运行RubyonRails的docker容器?,ruby-on-rails,ruby,docker,dockerfile,Ruby On Rails,Ruby,Docker,Dockerfile,我正在尝试在docker上没有根用户的情况下运行RoR项目。我使用的是正式的ruby映像,当我使用非root用户执行bundle安装时,一切正常,但是当我运行rails s-b'0.0.0'或bundle exec rails s s-b'0.0.0'时,我得到以下错误: /usr/local/bundle/gems/bootsnap-1.3.2/lib/bootsnap/compile\u cache/iseq.rb:37:在“获取”中:权限被拒绝-bs\u获取:原子写入\u缓存\u文件:打开
bundle安装时,一切正常,但是当我运行rails s-b'0.0.0'
或bundle exec rails s s-b'0.0.0'
时,我得到以下错误:
/usr/local/bundle/gems/bootsnap-1.3.2/lib/bootsnap/compile\u cache/iseq.rb:37:在“获取”中:权限被拒绝-bs\u获取:原子写入\u缓存\u文件:打开(Errno::EACCES)
这是我的Dockerfile:
FROM ruby:2.6.3
COPY controleGarrafao/ /home/docker/controleGarrafao
RUN apt-get update -qq && apt-get install sudo
WORKDIR /home/docker/controleGarrafao
RUN chmod +x /usr/bin/docker_entrypoint.sh
RUN chmod 777 /usr/local/bin/bundle
RUN useradd -m docker && echo "docker:docker" | \
chpasswd
RUN echo "docker ALL=(ALL:ALL) NOPASSWD: ALL" | \
tee -a /etc/sudoers
RUN chmod 777 /home/docker
USER docker
RUN bundle install
EXPOSE 3000
有人能帮我吗?正如您的错误消息所示,问题似乎出在gembootsnap
上
如果您查看以下内容:
请注意,bootsnap会写入tmp/cache,并且该目录必须是
可写的。如果不启动,Rails将无法启动。如果这是
不可接受(例如,您在只读容器中运行,并且
不愿意装入可写tmpdir),应删除此行
或者将其包装在条件中
“此行”指的是config/boot.rb
因此,您需要确保tmp/cache目录在容器中是可写的,或者从config/boot.rb
中删除bootsnap行,您可能需要检查项目的权限。我已经检查了我的项目的权限,并在我的项目上运行了chmod 777
,错误再次发生。我把我的文件放在这里,如果我还有什么可以帮你的,请告诉我。非常感谢您的回复。我指的是更多的chown
,以查看您的应用程序是否需要对root
拥有的任何文件进行操作。托比在这里观察得很好。