【发布时间】:2021-02-06 00:31:32
【问题描述】:
我一直在尝试创建一个 docker 映像并运行 ruby 文件
以下是创建docker镜像的代码
FROM ruby:3
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN gem install bundler && \
bundle config --global frozen 1 && \
bundle install
RUN gem install extensions
COPY app.rb config.ru database.rb utils.rb thin.rb ./
EXPOSE 8080
CMD exec thin -R config.ru -p 8080 start
我也尝试了CMD bundle exec thin start,而不是上面的最后一个命令。
然后我执行下面的命令来构建镜像
sudo docker build -t project3 .
并且构建成功。
但是当我运行docker run -p 8080:8080 project3
我收到以下错误
mayuresh@mayuresh-Lenovo-ideapad-330-15IKB:~/Softwares/CS291_project3$ sudo docker run -p 8080:8080 project3
/usr/local/bundle/gems/mustermann-1.0.3/lib/mustermann/regular.rb:22:in `initialize': wrong number of arguments (given 2, expected 1) (ArgumentError)
from /usr/local/bundle/gems/mustermann-1.0.3/lib/mustermann/pattern.rb:59:in `new'
from /usr/local/bundle/gems/mustermann-1.0.3/lib/mustermann/pattern.rb:59:in `block in new'
from /usr/local/bundle/gems/mustermann-1.0.3/lib/mustermann/equality_map.rb:43:in `fetch'
from /usr/local/bundle/gems/mustermann-1.0.3/lib/mustermann/pattern.rb:59:in `new'
from /usr/local/bundle/gems/mustermann-1.0.3/lib/mustermann.rb:67:in `new'
from /usr/local/bundle/gems/mustermann-1.0.3/lib/mustermann.rb:70:in `block in new'
from /usr/local/bundle/gems/mustermann-1.0.3/lib/mustermann.rb:70:in `map'
from /usr/local/bundle/gems/mustermann-1.0.3/lib/mustermann.rb:70:in `new'
from /usr/local/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb:1641:in `compile'
from /usr/local/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb:1629:in `compile!'
from /usr/local/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb:1271:in `error'
from /usr/local/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb:1831:in `<class:Base>'
from /usr/local/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb:889:in `<module:Sinatra>'
from /usr/local/bundle/gems/sinatra-2.0.7/lib/sinatra/base.rb:22:in `<top (required)>'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /usr/local/bundle/gems/sinatra-2.0.7/lib/sinatra/main.rb:26:in `<module:Sinatra>'
from /usr/local/bundle/gems/sinatra-2.0.7/lib/sinatra/main.rb:1:in `<top (required)>'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /usr/local/bundle/gems/sinatra-2.0.7/lib/sinatra.rb:1:in `<top (required)>'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `require'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `rescue in require'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in `require'
from /app/app.rb:1:in `<top (required)>'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from config.ru:1:in `block in <main>'
from /usr/local/bundle/gems/rack-2.0.7/lib/rack/builder.rb:55:in `instance_eval'
from /usr/local/bundle/gems/rack-2.0.7/lib/rack/builder.rb:55:in `initialize'
from config.ru:1:in `new'
from config.ru:1:in `<main>'
from /usr/local/bundle/gems/thin-1.7.2/lib/rack/adapter/loader.rb:33:in `eval'
from /usr/local/bundle/gems/thin-1.7.2/lib/rack/adapter/loader.rb:33:in `load'
from /usr/local/bundle/gems/thin-1.7.2/lib/thin/controllers/controller.rb:182:in `load_rackup_config'
from /usr/local/bundle/gems/thin-1.7.2/lib/thin/controllers/controller.rb:72:in `start'
from /usr/local/bundle/gems/thin-1.7.2/lib/thin/runner.rb:203:in `run_command'
from /usr/local/bundle/gems/thin-1.7.2/lib/thin/runner.rb:159:in `run!'
from /usr/local/bundle/gems/thin-1.7.2/bin/thin:6:in `<top (required)>'
from /usr/local/bundle/bin/thin:23:in `load'
from /usr/local/bundle/bin/thin:23:in `<main>'
<internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- sinatra (LoadError)
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /app/app.rb:1:in `<top (required)>'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from config.ru:1:in `block in <main>'
from /usr/local/bundle/gems/rack-2.0.7/lib/rack/builder.rb:55:in `instance_eval'
from /usr/local/bundle/gems/rack-2.0.7/lib/rack/builder.rb:55:in `initialize'
from config.ru:1:in `new'
from config.ru:1:in `<main>'
from /usr/local/bundle/gems/thin-1.7.2/lib/rack/adapter/loader.rb:33:in `eval'
from /usr/local/bundle/gems/thin-1.7.2/lib/rack/adapter/loader.rb:33:in `load'
from /usr/local/bundle/gems/thin-1.7.2/lib/thin/controllers/controller.rb:182:in `load_rackup_config'
from /usr/local/bundle/gems/thin-1.7.2/lib/thin/controllers/controller.rb:72:in `start'
from /usr/local/bundle/gems/thin-1.7.2/lib/thin/runner.rb:203:in `run_command'
from /usr/local/bundle/gems/thin-1.7.2/lib/thin/runner.rb:159:in `run!'
from /usr/local/bundle/gems/thin-1.7.2/bin/thin:6:in `<top (required)>'
from /usr/local/bundle/bin/thin:23:in `load'
from /usr/local/bundle/bin/thin:23:in `<main>'
另外,我想提一下,之前我已经使用类似的 docker 文件对许多项目进行了 docker 化,但我不明白这种方法可能存在什么问题。
感谢您的帮助!
【问题讨论】:
标签: ruby-on-rails ruby docker sinatra