如何使用dockerfile安装ruby和bundler?

这里是新的ruby和打包机。 我正在使用这个docker文件将它们安装在docker镜像中:

FROM alpine:3.5 # Install Ruby, Ruby Bundler and other ruby dependencies RUN apk add --update \ ruby ruby-bigdecimal ruby-bundler \ ca-certificates libressl \ libressl-dev build-base ruby-dev \ ruby-rdoc ruby-io-console ruby-irb; \ \ && bundle config build.nokogiri --use-system-libraries; \ && bundle config git.allow_insecure true; \ \ && gem install json foreman --no-rdoc --no-ri; \ && gem cleanup; \ && rm -rf /usr/lib/ruby/gems/*/cache/*; \ && apk del libressl-dev build-base ruby-dev; \ && rm -rf /var/cache/apk/* /tmp; CMD ["bundle"] 

当我运行一个docker运行时,我得到:

 Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine. Could not locate Gemfile or .bundle/ directory 

我如何解决这个问题? 我只想安装ruby和ruby捆绑,并完成这个…

有预先构build的ruby图像( Alpine 3.6 Ruby 2.4 ),其中包括bundler 。 开始使用它们比较容易,因为它们通常使用当前的“最佳实践”来构build。

请注意,他们在映像构build中使用ENV指令设置了BUNDLE_SILENCE_ROOT_WARNING环境variables,以删除root警告。

您通常不会将bundler作为容器的CMD运行,但是您可以在RUN映像构build步骤中运行bundler

以非root用户身份运行容器在任何情况下都不是一个坏主意。 使用USER指令来改变它。

 FROM ruby:2.4-stretch WORKDIR /app ADD . /app/ RUN set -uex; \ bundle install; \ adduser -D rubyapp; \ mkdir -p /app/data; \ chown rubyapp /app/data USER rubyapp CMD [ "ruby", "whatever.rb" ] 
Interesting Posts