![](/img/trans.png)
[英]How can I execute cron task as a non-root user within the rails docker container?
[英]How to run a docker container for ruby on rails without root user?
我正在尝试在docker上运行没有root用户的RoR项目。 我正在使用官方ruby映像,当我使用非root用户执行bundle install
时一切正常,但是当我运行rails s -b '0.0.0.0'
或者bundle exec rails s -b '0.0.0.0'
我得到这个错误:
/usr/local/bundle/gems/bootsnap-1.3.2/lib/bootsnap/compile_cache/iseq.rb:37:in`fetch':权限被拒绝 - bs_fetch:atomic_write_cache_file:open(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
有人可以帮我弄这个吗?
似乎问题出在gem bootsnap
如您的错误消息所示。
如果您查看bootsnap文档,您会看到:
请注意,bootsnap写入tmp / cache,该目录必须是可写的。 如果不是,Rails将无法启动。 如果这是不可接受的(例如,您在只读容器中运行并且不愿意在可写的tmpdir中安装),则应删除此行或将其包装在条件中。
“此行”是指在config/boot.rb
require 'bootsnap/setup'
因此,您需要确保tmp / cache目录在容器中可写,或者从config/boot.rb
删除bootsnap行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.