gpt4 book ai didi

ruby-on-rails - 如何在没有 root 用户的情况下运行 ruby​​ on rails 的 docker 容器?

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:06 25 4
gpt4 key购买 nike

我正在尝试在没有 root 用户的情况下在 docker 上运行 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': Permission denied - 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 documentation你看到这个:

Note that bootsnap writes to tmp/cache, and that directory must be writable. Rails will fail to boot if it is not. If this is unacceptable (e.g. you are running in a read-only container and unwilling to mount in a writable tmpdir), you should remove this line or wrap it in a conditional.

“这一行”指的是config/boot.rb中的require 'bootsnap/setup'

所以你要么需要确保 tmp/cache 目录在你的容器中是可写的,要么从 config/boot.rb

中删除 bootsnap 行

关于ruby-on-rails - 如何在没有 root 用户的情况下运行 ruby​​ on rails 的 docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57512856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com