【问题标题】:Error when creating a Docker image for Ruby On Rails environment (from a Dockerfile)为 Ruby On Rails 环境创建 Docker 映像时出错(来自 Dockerfile)
【发布时间】:2015-01-05 16:02:25
【问题描述】:

我猜是环境问题。 当我手动执行(没有 Dockerfile)时,它可以工作。

这是我的 Dockerfile:

FROM ubuntu:14.04
RUN apt-get update
RUN apt-get upgrade --assume-yes
RUN apt-get install wget vim git --assume-yes
# install RVM
RUN apt-get install build-essential curl --assume-yes
RUN curl -L https://get.rvm.io | bash -s stable
RUN echo 'source /etc/profile.d/rvm.sh' >> ~/.bashrc
RUN /usr/local/rvm/bin/rvm-shell -c "rvm requirements"
# install Ruby
RUN /usr/local/rvm/bin/rvm-shell -c "rvm autolibs enable"
RUN /usr/local/rvm/bin/rvm-shell -c "rvm install 2.1.2"
# install Rails
RUN echo "gem: --no-rdoc --no-ri" >> ~/.gemrc
RUN gem install rails -v 4.1.5
# install nodeJS
RUN sudo apt-get install nodejs --assume-yes
EXPOSE 3000

比我构建的:

sudo docker build -t="james/rails" .

我得到了那个错误:

Step 11 : RUN gem install rails -v 4.1.5
 ---> Running in 44efc6b7c254
/bin/sh: 1: gem: not found
2014/09/04 18:33:52 The command [/bin/sh -c gem install rails -v 4.1.5] returned a non-zero code: 127

【问题讨论】:

  • 在没有外壳的情况下使用 rvm 很棘手。此外,rvm 的重点是管理 ruby​​ 的多个安装,而使用 docker,您不需要它。只需使用一些工作的 ruby​​ 基础镜像,例如 binaryphile/ruby (registry.hub.docker.com/u/binaryphile/ruby),或者如果您不喜欢以 root 身份安装东西,您可以使用我的基于 rbenv 的镜像:cthulhu666/docker-rbenv (registry.hub.docker.com/u/cthulhu666/docker-rbenv)我鼓励你不要以 root 身份安装东西)。作为旁注,在 Dockerfile 中执行“apt-get upgrade”被认为是一种不好的做法。

标签: ruby-on-rails docker


【解决方案1】:

试试RUN /bin/bash -l -c "gem install rails -v 4.1.5",而不是你在那里的那一行。这有什么改变吗?

【讨论】:

  • 当您对所有 RVM 安装行使用 /bin/bash -l -c 或类似的 /bin/sh 命令时会发生什么?
  • @AlexLynham gem 实际上是一个 rvm 包装器。交互式和登录 bash shell 将为 rvm 加载/设置一些环境变量。 -lc 确保 rvm 设置正确。
【解决方案2】:

在 Alex Lynham 的帮助下,这是一个工作的 Dockerfile:

FROM ubuntu:14.04

RUN apt-get update
RUN apt-get install wget vim git --assume-yes

# install RVM
RUN apt-get install build-essential curl --assume-yes
RUN curl -L https://get.rvm.io | bash -s stable
RUN echo 'source /etc/profile.d/rvm.sh' >> ~/.bashrc
RUN /usr/local/rvm/bin/rvm-shell -c "rvm requirements"

# install Ruby
RUN /bin/bash -l -c "rvm autolibs enable"
RUN /bin/bash -l -c "rvm install 2.1.2"

# install Rails
RUN echo "gem: --no-rdoc --no-ri" >> ~/.gemrc
RUN /bin/bash -l -c "gem install rails -v 4.1.5"

# install nodeJS
RUN sudo apt-get install nodejs --assume-yes

EXPOSE 3000

【讨论】:

    【解决方案3】:

    您需要安装 ruby​​gems 才能使用它。

    RUN apt-get install rubygems
    

    另请参阅:Can I install gems with apt-get on Ubuntu?

    【讨论】:

    • RVM 会处理这个问题。
    • 通常从 aptitude 安装 RubyGems 是个坏主意,你是在自找麻烦 :)
    猜你喜欢
    • 2018-04-23
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多