Ruby on rails 如何在docker上安装Ruby?

Ruby on rails 如何在docker上安装Ruby?,ruby-on-rails,ruby,docker,docker-machine,calabash-android,Ruby On Rails,Ruby,Docker,Docker Machine,Calabash Android,我正在尝试在docker上安装ruby。我可以安装1.9版本,但无法安装最新版本,如2.2.0及更高版本。我实际上是想在docker上安装葫芦。我试过了。每当我尝试在其中安装葫芦安卓系统时,都会出现错误 ERROR: Error installing calabash-android: luffa requires Ruby version >= 2.0. 您可以从以下内容开始查看dockerfile: # 2016 FROM ruby:2.3.0 # 2020 # Import y

我正在尝试在docker上安装ruby。我可以安装1.9版本,但无法安装最新版本,如2.2.0及更高版本。我实际上是想在docker上安装葫芦。我试过了。每当我尝试在其中安装葫芦安卓系统时,都会出现错误

ERROR:  Error installing calabash-android:
luffa requires Ruby version >= 2.0.

您可以从以下内容开始查看dockerfile:

# 2016
FROM ruby:2.3.0

# 2020
# Import your ruby version
FROM ruby:2.7.1
# Install bundler gem
RUN gem install bundler
# Assign a work directory
WORKDIR /work
这将使用,并且已经安装了ruby


2020版本来自于中提到的来自的“”。

如果您从不同的基本Docker实例启动
,您只需运行
命令,从基本实例的包管理系统安装Ruby即可。例如,演示如何使用
apt get
在Ubuntu实例上安装Ruby:

# Pull base image.
FROM dockerfile/ubuntu

# Install Ruby.
RUN \
  apt-get update && \
  apt-get install -y ruby
FROM ubuntu

RUN apt-get update

# basics
RUN apt-get install -y openssl

# install RVM, Ruby, and Bundler
RUN \curl -L https://get.rvm.io | bash -s stable
RUN /bin/bash -l -c "rvm requirements"
RUN /bin/bash -l -c "rvm install 2.0"
RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc"
并显示配置为在Ubuntu实例上安装RVM和Ruby的Dockerfile:

# Pull base image.
FROM dockerfile/ubuntu

# Install Ruby.
RUN \
  apt-get update && \
  apt-get install -y ruby
FROM ubuntu

RUN apt-get update

# basics
RUN apt-get install -y openssl

# install RVM, Ruby, and Bundler
RUN \curl -L https://get.rvm.io | bash -s stable
RUN /bin/bash -l -c "rvm requirements"
RUN /bin/bash -l -c "rvm install 2.0"
RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc"

这使得ruby可用于任何未来的运行命令,而不仅仅是bash:

FROM debian:stretch-slim
RUN \
  apt-get update && apt-get install -y --no-install-recommends --no-install-suggests curl bzip2 build-essential libssl-dev libreadline-dev zlib1g-dev && \
  rm -rf /var/lib/apt/lists/* && \
  curl -L https://github.com/sstephenson/ruby-build/archive/v20180329.tar.gz | tar -zxvf - -C /tmp/ && \
  cd /tmp/ruby-build-* && ./install.sh && cd / && \
  ruby-build -v 2.5.1 /usr/local && rm -rfv /tmp/ruby-build-* && \
  gem install bundler --no-rdoc --no-ri

声誉很低,所以我无法在线评论(这么多年的潜伏,唉),但如果其他人在寻找将旧ruby版本安装到docker的方法时遇到这种情况,我发现@grosser的答案非常有用——它在尝试通过RVM安装的情况下起作用,至少对我来说是这样

但是,我建议使用推荐的方法安装ruby build,以下方法对我很有效:

<prior steps>
RUN git clone https://github.com/rbenv/ruby-build.git && \
  PREFIX=/usr/local ./ruby-build/install.sh && \
  ruby-build -v 2.4.1 /usr/local && \
  gem install bundler -v <VERSION HERE> --no-ri --no-rdoc && bundle install
<following steps>

运行git克隆https://github.com/rbenv/ruby-build.git && \
前缀=/usr/local./ruby build/install.sh&&\
ruby构建-v2.4.1/usr/local&&\
gem安装bundler-v--no ri--no-rdoc&&bundle安装

这里的关键点是,这可以让您了解ruby build的最新版本,而不是像@grosser的评论中那样硬编码到2018-03-29版本。

多亏了@Jacob和@grosser,我成功地以类似的方式设置了我的版本,如果更简单一点的话:

# Install Local ruby
RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv \
  &&  echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc \
  &&  echo 'eval "$(rbenv init -)"' >> ~/.bashrc

ENV HOME /home/jenkins # Change this dir as needed.
ENV PATH "$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
ENV RUBY_VERSION 2.6.3

RUN mkdir -p "$(rbenv root)"/plugins \
    && git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

RUN rbenv install $RUBY_VERSION

RUN rbenv global $RUBY_VERSION && rbenv versions && ruby -v

# RUN curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash # Uncomment this to get rbenv to validate your setup.

如果您想使用
捆绑安装
之类的工具,并且不使用预装的开发工具(如Ubuntu)的基本映像,则需要安装以下软件包:

RUN apt-get update && apt-get install -y ruby ruby-dev ruby-bundler build-essential
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

感谢@VonC的帮助。当我在容器中时,我可以手动安装ruby吗?@muneermuhammed否:您可以在Dockerfile中指定ruby的安装,以便在安装了ruby的情况下构建映像,然后允许您运行ruby可用的容器。您不需要直接在容器中安装任何东西。另外,如果Dockerfile以FROM ruby:2.3.0开始,则根本不需要安装ruby。它已经为您安装好了。如果我的docker文件以ubuntu:14.04开始,我可以简单地以run ruby:2.3.0的形式运行该命令吗?@muneermuhammed否,run用于shell命令,而不是docker映像名。为了安装ruby,您需要在Dockerfile中复制的内容:它是在Debian Jessie发行版的基础上完成的,但可能在ubuntu发行版的基础上工作。@ArMD谢谢。我在答案中加入了您的评论,以提高可视性。看来通过rvm通过Dockerfile for ruby链接到gist的链接是错误的。另外,可能需要将curl添加到
#basics
中,比如
运行apt get install-y openssl curl
。我花了两天的时间才来到这里,我的环境是docker使用图像openjdk:8在android构建管道中使用