2016-05-15 41 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解決了這個問題。