在我的dockerFile中,
我试着做
service myapp start;
但是当我启动容器时:
docker run -it myapp_image service myapp status
>dead but pid file exists
但是,如果我进入该变速器并手动启动它,它就可以顺利运行
docker run -it myapp_image /bin/bash
bash-3.2$ service myapp restart
bash-3.2$ service myapp status
> myapp is running.
从DockerFile运行服务的任何解决方法?
答案 0 :(得分:2)
service myapp start
会在后台启动您的应用作为服务。只要此命令存在,docker容器就会停止。这是Docker容器的预期行为。
您要做的是让CMD
指令在前台而不是在后台启动您的应用。
答案 1 :(得分:1)
如果您将Dockerfile CMD服务myapp启动,但随后运行您编译的映像,并将服务myapp状态作为启动命令,则覆盖CMD命令。所以你的启动命令没有被执行。如果myapp在启动时打印出来,请尝试
docker logs your_container_id
查看是否有您期望的输出。或者将启动myapp的脚本作为启动命令,然后查询其状态。然后,使用logs命令,您可以查看它是否正在运行。
答案 2 :(得分:1)
只要作为docker run参数传递的命令,即只要“服务”程序运行,容器就会存在。
您可以在前台启动服务器,或者运行在后台启动服务器的命令(可能还有更多内容),并继续生活做更多的事情,例如monit或supervisord在前台重新启动服务器(如果它结束)。 / p>