2016-05-15 1 views
6

Ich führe zwei Dockerbehälter. Eins mit Schienen und eins mit Postgres db. Hier ist meine Docker-Compose-Datei:Konnte Rake-11.1.2 im Dockerkorb der Schienen nicht finden

# 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 

Hier die Dockerfile für die Schienen App:

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"] 

Wenn ich laufen docker-compose up alles funktioniert und ich kann über die IP-Adresse eine Verbindung zum Server aus Docker-Maschine.

Wenn ich versuche, mit dem folgenden Befehl an den Behälter zu verbinden:

docker-compose run rails console 

ich diesen Fehler:

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

Bündel im Innern des Behälters installieren hat keine Wirkung und das erwähnte Juwel ist auf jeden Fall Eingerichtet. In anderen Stack-Overflow Fragen wurden erwähnt, dass ich bin/spring stop ausführen sollte. Also lief ich:

docker-compose run bin/spring stop 

Und es gibt:

Spring is not running 

ich noch comparibly bin neu in Ruby/Rails und Docker. Ich hoffe jemand kann mir hier helfen! Vielen Dank im Voraus

PS: Kommentare zu den Dockerfiles werden geschätzt!

+0

Ich habe genau das gleiche Problem! – JacobEvelyn

Antwort

1

scheint eine späte Antwort zu sein, aber ich werde trotzdem antworten. Meine Vermutung ist, dass Ihre Gemfile.lock Ihre rake Version festhält und deshalb beschweren sich. Wenn Sie die docker build ohne ein Volumen wie in Ihrem docker-compose.yml definiert ausführen, können Sie leicht so enden. Also probier es aus.

In Bezug auf Ihre Dockerfile: Wenn Sie dies nur für Entwicklungszwecke verwenden, dann könnte dies in Ordnung sein. Andernfalls sollten Sie darüber nachdenken, es mit einem anderen Benutzer auszuführen (erstellen Sie einen Benutzer mit useradd und führen Sie RUN Aufgaben usw. aus). Sie können auch einige Bundler-Funktionen wie die Option --path=<path> verwenden.

+0

Ich habe versucht, einen Benutzer einzustellen, es hat nicht funktioniert. Die Paketinstallation löst jetzt einen Berechtigungsfehler mit dem neuen Benutzer aus –

0

Wir hatten genau das gleiche Problem. Obwohl Spring sagte, dass es nicht lief, wies mein Kollege auf mich hin, wenn ich in bin/rails schaute, würde ich sehen, dass es tatsächlich mit Rails laufen würde. Das Entfernen der spring verwandten Edelsteine ​​in Gemfile löste das Problem.