我需要获取安装了ruby的docker映像> = 2.5,然后在容器中运行bundle exec rake test
。我知道可以通过使用官方的docker ruby image来简单地实现,但是由于许可限制,我无法做到这一点。
所以,我需要处理的是image with rbenv pre-configured。经过多次试验和错误,我到达了以下dockerfile:
FROM launcher.gcr.io/google/ruby:latest
RUN rbenv install 2.5.7
RUN rbenv rehash
RUN rbenv global 2.5.7
COPY ./ /my-app
WORKDIR /my-app
RUN gem install bundler
RUN bundle install
ENTRYPOINT bundle exec rake test
我用docker build -f dockerfile.tests . -t tests
构建它,然后用docker run -i tests
运行,得到的是:
/usr/bin/env: 'ruby2.5': No such file or directory
这里有什么错误的想法吗?谢谢!
ps。我用RVM尝试了同样的方法,最终结果是完全一样的错误。也尝试过(最初)使用apt install
安装ruby 2.5,但可通过apt获得的最新版本是2.3。
[如果您不想使用正式的Ruby映像(我也这样做,因为它太大了,您可以轻松地从头开始构建基于Alpine的映像,不需要RVM或rbenv。
FROM alpine:3.10
ENV BUILD_PACKAGES bash curl curl-dev ruby-dev build-base
ENV RUBY_PACKAGES \
ruby ruby-io-console ruby-irb \
ruby-json ruby-etc ruby-bigdecimal ruby-rdoc \
libffi-dev zlib-dev
ENV TERM=linux
ENV PS1 "\n\n>> ruby \W \$ "
RUN apk --no-cache add $BUILD_PACKAGES $RUBY_PACKAGES
RUN echo 'gem: --no-document' > /etc/gemrc && \
gem install bundler
RUN gem update --system
RUN bundle config --global silence_root_warning 1
CMD bash
您甚至可能不需要我在这里安装的所有高山软件包。对我来说,随着时间的推移,我添加了这些,因为我发现如果没有它们,某些原生宝石将无法正确构建。