Docker的新手,我一直在尝试将其与Rails项目一起使用,但无法启动它。
试图更改红宝石版本并搜索网络,但是大多数问题涉及将应用程序部署到heroku,这不是我的情况。
Docker文件:
FROM ruby:2.4.1
RUN mkdir /zssn
WORKDIR /zssn
COPY Gemfile /zssn/Gemfile
COPY Gemfile.lock /zssn/Gemfile.lock
RUN gem install bundler
RUN bundle --version
RUN bundle install
COPY . /zssn
CMD ["rails", "server"]
docker-compose-yml
version: '3'
services:
web:
build: .
command: rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/zssn
ports:
- "3000:3000"
docker build。 --no-cache,运行bundler命令安装它时似乎工作正常。
---> Running in d4650608f428
Successfully installed bundler-2.0.1
有什么想法吗?
答案 0 :(得分:2)
您需要更新Rubygems:
RUN gem update --system
除了确保您拥有正确的捆绑程序版本之外,请运行:
RUN gem install bundler -v 2.0.1
Here,您可以找到更深入的解释。
答案 1 :(得分:0)
我认为您需要升级到捆绑软件2随附的红宝石图像(例如FROM ruby:2.6.3
),或者将Gemfile.lock
与您要使用的捆绑软件版本重新捆绑在一起。或至少这对我有用。
按照Bundler guides的建议调整环境变量无效。
这github issue使我认为这是预期的行为,但我可能完全错了。
答案 2 :(得分:0)
在将RUN捆绑包安装到Dockerfile之前添加此行对我有用。
RUN gem install bundler -v 2.0.1
将其留在此处以供将来参考!
答案 3 :(得分:0)
在您Gemfile.lock的底部,您可能会找到捆绑软件版本:
BUNDLED WITH
2.0.1
请确保将其与正确的版本捆绑在一起
答案 4 :(得分:0)
Ruby映像随附已安装的bundler
。
默认情况下,环境变量BUNDLER_VERSION
设置为bundler
的预安装版本。即使您卸载此版本,bundle
也会检查此环境变量和
如果存在v1 / v2不匹配,则会引发错误“您必须将此捆绑文件使用Bundler 2或更高版本”
确保您的Gemfile.lock
与所需版本捆绑在一起:
BUNDLED WITH
2.1.4
如果有其他版本,则可以通过运行bundle update --bundler
https://bundler.io/man/bundle-update.1.html
在Dockerfile
中,将环境变量BUNDLER_VERSION
覆盖到所需的捆绑软件版本并安装:
ENV BUNDLER_VERSION=2.1.4
RUN gem update --system && \
gem install bundler:2.1.4 && \
bundle install