在rails docker容器中找不到rake-11.1.2

时间:2016-05-15 11:52:08

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

我正在运行两个码头集装箱。一个带有rails,一个带有Postgres db。 这是我的docker-compose文件:

# Docs: https://docs.docker.com/compose/compose-file/
version: '2'
services:
  db:
    image: postgres
    environment: 
      - POSTGRES_PASSWORD=xxx

  rails:
    build: .
    command: rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    links:
      - db
    depends_on:
      - db

这里是rails app的Dockerfile:

FROM ruby:2.3

RUN apt-get update 
RUN apt-get install -y build-essential nodejs 

RUN mkdir -p /app
WORKDIR /app

COPY Gemfile Gemfile.lock ./ 
RUN gem install bundler && bundle install --jobs 20 --retry 5

COPY . ./

EXPOSE 3000

ENTRYPOINT ["bundle", "exec"]

CMD ["rails", "server", "-b", "0.0.0.0"]

当我运行docker-compose up时,一切正常,我可以通过docker-machine的ip地址连接到服务器。

当我尝试使用以下命令连接到容器时:

docker-compose run rails console

我收到此错误:

Could not find rake-11.1.2 in any of the sources
Run `bundle install` to install missing gems.

在容器内部进行捆绑安装没有任何效果,并且明确安装了所提到的gem。在其他堆栈溢出问题中提到我应该运行bin/spring stop。所以我跑了:

docker-compose run bin/spring stop

它返回:

Spring is not running

我仍然是ruby / rails和docker的新手。我希望有人可以帮助我! 提前致谢

PS:对Dockerfiles的评论表示赞赏!

3 个答案:

答案 0 :(得分:1)

似乎是一个迟到的回应,但无论如何我都会回答。我的有根据的猜测是,您的Gemfile.lock正在固定您的rake版本,这就是为什么它会抱怨。如果您运行的docker build没有像docker-compose.yml中那样定义的卷,则可以轻松地像这样结束。所以试一试。

关于您的Dockerfile:如果您仅将此用于开发目的,那么这可能没问题。否则,您应该考虑使用其他用户运行它(使用useradd创建用户并运行RUN任务等等。您可能还想使用某些捆绑器功能,例如--path=<path>选项。

答案 1 :(得分:0)

我们遇到了完全相同的问题。尽管Spring说它没有运行,但我的同事向我指出,如果我调查bin/rails我会发现它实际上会与Rails一起运行。删除spring中的Gemfile相关宝石解决了这个问题。

答案 2 :(得分:0)

我设法通过在Dockerfile中使用此命令来解决此问题。

RUN bundle install --without development test --with runtime --deployment