2017-02-20 23 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

谢谢,我会试试看。 –

相关问题