2017-02-20 3 views
0

Ich habe ein Rails Bild mit Andockfenster gebaut, aber jetzt weiß ich nicht, wie Sie Dockerfile verwenden, um die passenger einzustellen.Dockerfile automatisch starten Passagier starten mit Schienen

Mein Dockerfile jetzt ist

FROM username/my_app:latest 
WORKDIR /my_app 
# Expose port 3000 to the Docker host, so we can access it from the outside. 
EXPOSE 3000 

Jetzt muss ich zuerst den Behälter laufen, und dann führen Sie den passenger Befehl wie folgt.

docker run -it -p 4321:3000 \ 
--name my_app \ 
username/my_app 

Dann

docker exec -itd my_app /bin/bash -c -l "whenever -iw" 
docker exec -it my_app /bin/bash -c -l "passenger start" 

eingeben Endlich kann ich meine App Zugriff in http://localhost:4321

Gibt es eine Weise, die ich nur docker run .... verwenden, können automatisch meine App zu starten und die passenger start drehen?

Ich habe das versucht, aber es scheint nicht funktionieren.

FROM username/my_app:latest 
WORKDIR /my_app 
RUN whenever -iw 
RUN passenger start 
# Expose port 3000 to the Docker host, so we can access it from the outside. 
EXPOSE 3000 

Antwort

0

Verwenden Sie ENTRYPOINT, um den Befehl nach dem Start des Containers auszuführen.

FROM username/my_app:latest 
WORKDIR /my_app 
# Expose port 3000 to the Docker host, so we can access it from the outside. 
EXPOSE 3000 
ENTRYPOINT ["whenever -iw && passenger start "] 

Für weitere Informationen über ENTRYPOINT unten Links verweisen:

Dockerfile Entrypoint documentation

+0

Es Docker werfen: 'Fehlerreaktion von Daemon: OCI-Laufzeitfehler: container_linux.go: 247: Startbehälter Prozess verursacht„exec : \ "awesome -iw && passagier start \": Die ausführbare Datei wurde nicht in $ PATH gefunden. ".' –

+0

Entweder ist das' aswey' Paket nicht installiert oder es ist nicht in der Lage den Befehlspfad zu finden. Zuerst starten Sie den Container manuell und überprüfen Sie, ob beide Befehle korrekt sind und ausgeführt werden können, wenn Sie wie 'aswhere -iw && passagier start' laufen oder die Shell/bin/sh standardmäßig verwenden, die diesen binären Pfad nicht erkennt. Wenn beide Befehle nicht zusammen und getrennt ausgeführt werden, dann erstellen Sie eine Shell-Skriptdatei und fügen Sie diese beiden Befehle dem Skript hinzu und fügen Sie dieses Skript der Docker-Datei hinzu. Geben Sie den Skriptpfad in der Einstiegspunktdatei an. –

+0

Danke, ich werde es versuchen. –

Verwandte Themen