【问题标题】:Docker compose up fails with `require': cannot load such file -- rack/handler/rails (LoadError)Docker 组合失败并出现“require”:无法加载此类文件 -- rack/handler/rails (LoadError)
【发布时间】:2016-04-06 12:17:14
【问题描述】:

这是我的 Dockerfile:

FROM rails:4.2.4
MAINTAINER Brena Monteiro <me@monteirobrena.com>
RUN mkdir -p ~/myapp
COPY . ~/myapp
COPY Gemfile ~/myapp/Gemfile
COPY Gemfile ~/myapp/Gemfile.lock
WORKDIR ~/myapp
RUN bundle install
CMD rails s -b 0.0.0.0

还有我的docker-compose.yml

web:
  build: .
  command: rails s -p 3000 -b '0.0.0.0'
  ports:
    - '3000:8080'
  volumes:
    - .:/Users/monteirobrena/myapp

如果我运行docker run,Docker 会正确启动:

docker run -v ./:/Users/monteirobrena/docker/myapp -p 3000:8080 myapp

但是当我运行docker-compose up 时,我收到了这个错误:

➜  app git:(add-docker) ✗ docker-compose up         
myRecreating app_web_1
myAttaching to app_web_1
web_1 | /usr/local/bundle/gems/rack-1.6.4/lib/rack/handler.rb:78:in `require': cannot load such file -- rack/handler/rails (LoadError)
web_1 |   from /usr/local/bundle/gems/rack-1.6.4/lib/rack/handler.rb:78:in `try_require'
web_1 |   from /usr/local/bundle/gems/rack-1.6.4/lib/rack/handler.rb:16:in `get'
web_1 |   from /usr/local/bundle/gems/rack-1.6.4/lib/rack/server.rb:290:in `server'
web_1 |   from /usr/local/bundle/gems/railties-4.2.3/lib/rails/commands/server.rb:125:in `print_boot_information'
web_1 |   from /usr/local/bundle/gems/railties-4.2.3/lib/rails/commands/server.rb:75:in `start'
web_1 |   from /usr/local/bundle/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:80:in `block in server'
web_1 |   from /usr/local/bundle/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:75:in `tap'
web_1 |   from /usr/local/bundle/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:75:in `server'
web_1 |   from /usr/local/bundle/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
web_1 |   from /usr/local/bundle/gems/railties-4.2.3/lib/rails/commands.rb:17:in `<top (required)>'
web_1 |   from /usr/src/app/bin/rails:9:in `require'
web_1 |   from /usr/src/app/bin/rails:9:in `<top (required)>'
web_1 |   from /usr/local/bundle/gems/spring-1.6.4/lib/spring/client/rails.rb:28:in `load'
web_1 |   from /usr/local/bundle/gems/spring-1.6.4/lib/spring/client/rails.rb:28:in `call'
web_1 |   from /usr/local/bundle/gems/spring-1.6.4/lib/spring/client/command.rb:7:in `call'
web_1 |   from /usr/local/bundle/gems/spring-1.6.4/lib/spring/client.rb:28:in `run'
web_1 |   from /usr/local/bundle/gems/spring-1.6.4/bin/spring:49:in `<top (required)>'
web_1 |   from /usr/local/bundle/gems/spring-1.6.4/lib/spring/binstub.rb:11:in `load'
web_1 |   from /usr/local/bundle/gems/spring-1.6.4/lib/spring/binstub.rb:11:in `<top (required)>'
web_1 |   from /usr/src/app/bin/spring:13:in `require'
web_1 |   from /usr/src/app/bin/spring:13:in `<top (required)>'
web_1 |   from bin/rails:3:in `load'
web_1 |   from bin/rails:3:in `<main>'
web_1 | Exiting
myapp_web_1 exited with code

有什么想法吗?

【问题讨论】:

  • 没有 docker 也能正常工作吗?
  • 是的,没有 Docker 和 docker run 也可以正常工作。

标签: ruby-on-rails docker docker-compose dockerfile


【解决方案1】:

使用bundle exec 启动rails 服务器,如下所示:

 web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  ports:
    - '3000:8080'
  volumes:
    - .:/Users/monteirobrena/myapp

【讨论】:

  • 这条线COPY Gemfile ~/myapp/Gemfile.lock不应该是COPY Gemfile.lock ~/myapp/Gemfile.lock吗?
  • 您能否删除 Docker 文件 CMD rails s -b 0.0.0.0 的最后一行并尝试再次运行 docker-compose?
  • 当我更改为bundle exec rails s 时,我收到此错误`require': cannot load such file
  • 同样没有CMD 行:(
  • 我将您的 Dockerfiledocker-compose-yml 文件复制/粘贴到现有项目中。我可以buildup,您可以将您的Gemfile 添加到您的问题中吗?
猜你喜欢
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2015-05-14
  • 2014-05-27
  • 2017-03-27
相关资源
最近更新 更多