2016-05-15 19 views
6

我正在运行两个docker容器。一个用rails和一个用Postgres db。 这里是我的搬运工,撰写文件:在rails docker容器中找不到rake-11.1.2

# 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 

这里Dockerfile的Rails应用程序:

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一切工作正常,我可以通过从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. 

束装在容器内没有任何作用,所提到的宝石,绝对是安装。在其他堆栈溢出问题中提到我应该运行bin/spring stop。所以,我跑:

docker-compose run bin/spring stop 

,并返回:

Spring is not running 

我还是comparibly新的Ruby/Rails和码头工人。我希望有人能帮助我! 在此先感谢

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

+0

我有完全相同的问题! – JacobEvelyn

回答

1

似乎是一个迟到的反应,但我会回答。我的教育猜测是你的Gemfile.lock是固定你的rake版本,这就是为什么它抱怨。如果您运行docker build而没有在您的docker-compose.yml中定义的体积,那么您可能会很容易就像这样结束。所以试试吧。

关于你的Dockerfile:如果你只用于开发目的,那么这可能是好的。否则,您应该考虑使用不同的用户来运行它(创建useradd的用户并相应地运行RUN任务等等)。您可能还想使用一些捆绑功能,如--path=<path>选项。

+0

我试图设置一个用户,它没有工作。 bundle install现在会向新用户抛出权限错误 –

0

我们有完全相同的问题。尽管Spring说它没有运行,但我的同事告诉我,如果我看看bin/rails我会发现它实际上会使用Rails运行。删除spring相关宝石Gemfile解决了这个问题。