【问题标题】:Docker run gives error `initialize': wrong number of arguments (given 2, expected 1) (ArgumentError)Docker 运行给出错误 `initialize': wrong number of arguments (given 2, expected 1) (ArgumentError)
【发布时间】: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>'

我尝试实现上面提到的代码 Link1 Link2

另外,我想提一下,之前我已经使用类似的 docker 文件对许多项目进行了 docker 化,但我不明白这种方法可能存在什么问题。

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby docker sinatra


    【解决方案1】:

    release history for mustermann 表示在 v1.1.0 中添加了对 ruby​​ v3.0.0 的支持。

    您正在使用 ruby​​ v3.0.0 和 mustermann v1.0.3

    要么将 ruby​​ 降级到 2.7,要么将 mustermann 升级到 1.1.0+

    【讨论】:

    • 注意:我猜测您只是在将 ruby​​ 升级到 v3 后才遇到此错误?在这种情况下,您可能还会遇到其他类似的过时依赖项问题...有一些向后不兼容的更改,您可能会遇到使用它运行旧代码的错误!
    • 这是添加支持的 PR:github.com/sinatra/mustermann/pull/97
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多