如何修复 Docker 在 Alpine 上使用错误的 Ruby 路径
How to fix Docker using the wrong Ruby path on Alpine
我在 Google 云 运行 中有一个非常简单的容器 运行ning Sinatra。由于 Dockerfile 没有任何变化,它最近停止工作了。
当我尝试 运行 时,我收到错误消息:
/usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- sinatra (LoadError)
from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from main_wow.rb:1:in `<main>'
Docker 文件:
FROM ruby:2.6.4-alpine3.9
ENV APP_HOME /WOW
WORKDIR $APP_HOME
ADD Gemfile* $APP_HOME/
RUN gem install bundler
RUN bundle install
ADD main_wow.rb $APP_HOME
ADD views/ $APP_HOME/views
# Start server
ENV PORT 3000
EXPOSE 3000
CMD ["ruby", "main_wow.rb"]
宝石文件:
source "http://rubygems.org"
gem 'sinatra'
gem 'i18n'
main_wow.rb
的前 10 行:
require "sinatra"
require "net/http"
require "json"
require "i18n"
I18n.config.available_locales = :en
configure do
set :public_folder, './views'
set :bind, '0.0.0.0'
end
据我所知,它正在尝试从主要版本 2.6.0 而不是 2.6.4 中获取 ruby gem。
我已经尝试创建一个 link,以在 Gemfile 上设置 ruby 版本,但 none 似乎有效...
经过几次猜测,我在Dockerfile的最后一行用bundle exec
修复了它:
CMD ["bundle", "exec", "ruby", "main_wow.rb"]
我在 Google 云 运行 中有一个非常简单的容器 运行ning Sinatra。由于 Dockerfile 没有任何变化,它最近停止工作了。
当我尝试 运行 时,我收到错误消息:
/usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- sinatra (LoadError)
from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from main_wow.rb:1:in `<main>'
Docker 文件:
FROM ruby:2.6.4-alpine3.9
ENV APP_HOME /WOW
WORKDIR $APP_HOME
ADD Gemfile* $APP_HOME/
RUN gem install bundler
RUN bundle install
ADD main_wow.rb $APP_HOME
ADD views/ $APP_HOME/views
# Start server
ENV PORT 3000
EXPOSE 3000
CMD ["ruby", "main_wow.rb"]
宝石文件:
source "http://rubygems.org"
gem 'sinatra'
gem 'i18n'
main_wow.rb
的前 10 行:
require "sinatra"
require "net/http"
require "json"
require "i18n"
I18n.config.available_locales = :en
configure do
set :public_folder, './views'
set :bind, '0.0.0.0'
end
据我所知,它正在尝试从主要版本 2.6.0 而不是 2.6.4 中获取 ruby gem。 我已经尝试创建一个 link,以在 Gemfile 上设置 ruby 版本,但 none 似乎有效...
经过几次猜测,我在Dockerfile的最后一行用bundle exec
修复了它:
CMD ["bundle", "exec", "ruby", "main_wow.rb"]