Ruby on rails Rails应用程序的Dockerfile-权限被拒绝

Ruby on rails Rails应用程序的Dockerfile-权限被拒绝,ruby-on-rails,bash,docker,rvm,dockerfile,Ruby On Rails,Bash,Docker,Rvm,Dockerfile,我试图使用rvm(作为非根用户)创建rails应用程序的docker映像,但遇到权限错误: Dockerfile: FROM ubuntu RUN apt-get update -q RUN apt-get install -qy curl RUN apt-get install -y libpq-dev RUN apt-get install -y imagemagick --fix-missing RUN apt-get install -y curl patch gawk g++ gcc

我试图使用rvm(作为非根用户)创建rails应用程序的docker映像,但遇到权限错误:

Dockerfile:

FROM ubuntu

RUN apt-get update -q
RUN apt-get install -qy curl
RUN apt-get install -y libpq-dev
RUN apt-get install -y imagemagick --fix-missing
RUN apt-get install -y curl patch gawk g++ gcc make libc6-dev patch libreadline6-dev zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool bison pkg-config libffi-dev

RUN useradd -ms /bin/bash app
USER app

RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
RUN curl -sSL https://get.rvm.io | bash -s stable
RUN /bin/bash -c -l 'rvm install 2.2.1'
RUN /bin/bash -c -l 'rvm use 2.2.1'
RUN /bin/bash -l -c "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
RUN /bin/bash -c -l 'gem install bundler --no-ri --no-rdoc'

RUN /bin/bash -c -l 'mkdir /home/app/rails_app'
WORKDIR /home/app/rails_app

ADD Gemfile /home/app/rails_app/Gemfile
ADD Gemfile.lock /home/app/rails_app/Gemfile.lock

RUN /bin/bash -c -l 'bundle install'

ADD . /home/app/rails_app

EXPOSE 3000

CMD /bin/bash -c -l 'RAILS_ENV=production rails server -p 3000'
图像构建得很好,但当我使用
docker run运行容器时
我得到以下错误:

/home/app/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/server.rb:367:in `delete': Permission denied @ unlink_internal - /home/app/rails_app/tmp/pids/server.pid (Errno::EACCES)
如果我加上:

USER root
RUN /bin/bash -c -l 'chmod -R 777 /home/app/rails_app/'
RUN /bin/bash -c -l 'chown -R app:app /home/app/rails_app/'
USER app
容器运行,但是rails服务器没有启动,并且日志中没有任何内容。在运行的容器上执行
/bin/bash
,并尝试启动rails服务器,在以应用程序身份登录时,以
rails:command not found
结束。有什么想法吗


谢谢

您创建了一个用户应用程序,这很好,但是您的行
用户应用程序
意味着您要对这个非特权用户执行这行之后的所有操作。这是错误的,你的线路用户。。。应该就在您的CMD命令之前。谢谢,我觉得rvm和
bundle install
需要以非root身份运行,因为我甚至在尝试以root身份运行这一切时都遇到了问题。这个假设不正确吗?如果gems是使用root安装的,我是否能够以非root用户身份访问它们?您是否需要rvm或rvmsudo才能安装?您创建了一个用户应用程序,这很好,但您的行
用户应用程序
意味着您可以对该非特权用户执行该行之后的所有操作。这是错误的,你的线路用户。。。应该就在您的CMD命令之前。谢谢,我觉得rvm和
bundle install
需要以非root身份运行,因为我甚至在尝试以root身份运行这一切时都遇到了问题。这个假设不正确吗?如果gems是使用root安装的,我是否能够以非root身份访问它们?是否需要rvm或rvmsudo才能安装?