2017-02-20 38 views
0

我用Docker構建了一個Rails圖片,但現在我不知道如何使用Dockerfile來設置passengerDockerfile自動運行乘客用Rails啓動

Dockerfile現在

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 

現在,我必須首先運行容器,然後執行這樣的命令passenger

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

然後鍵入

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

最後,我可以訪問我的應用程序在http://localhost:4321

有我只能用docker run ....自動啓動我的應用程序,並打開passenger start的方法嗎?

我試過這個,但它似乎不起作用。

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 

回答

0

使用ENTRYPOINT在啓動容器後執行命令。

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

欲瞭解更多信息有關ENTRYPOINT參考以下鏈接:

Dockerfile Entrypoint documentation

+0

它扔泊塢窗:'從後臺程序錯誤響應:OCI運行時錯誤:container_linux.go:247:啓動容器過程中造成「EXEC :\「只要-iw &&乘客啓動\」:在$ PATH中找不到「可執行文件」。「 –

+0

」無論是「程序包未安裝」還是無法找到命令路徑。首先手動啓動容器,並檢查這兩個命令是否正確,並且如果像'when -iw && passenger start'那樣運行就可以運行,或者可以使用/ bin/sh shell bydefault來檢測這些二進制路徑。如果兩個命令不一起執行並單獨工作,則創建shell腳本文件並將這兩個命令添加到腳本中,並將此腳本添加到docker文件中。在入口點文件中提供腳本路徑。 –

+0

謝謝,我會試試看。 –