1

在我的 dockerFile 中,

我试着做

service myapp start;

但是当我启动容器时:

docker run -it myapp_image service myapp status 
>dead but pid file exists

但是,如果我进入 conainer 并手动启动它,它运行没有问题

 docker run -it myapp_image /bin/bash
 bash-3.2$ service myapp restart
 bash-3.2$ service myapp status
        > myapp is running.

从 DockerFile 运行服务的任何解决方法?

4

3 回答 3

2

service myapp start将在后台将您的应用程序作为服务启动。一旦这个命令存在,docker 容器就会停止。这是 Docker 容器的预期行为。

您想要做的是让CMD指令在前台而不是在后台启动您的应用程序。

于 2014-10-25T11:30:39.973 回答
1

如果您将 Dockerfile CMD 服务 myapp start 放入,但随后运行已编译的映像,则将 service myapp 状态作为启动命令传递,您将覆盖 CMD 命令。所以你的启动命令没有被执行。如果您的 myapp 在启动时打印某些内容,请尝试执行

docker logs your_container_id

看看是否有你期望的输出。或者将启动 myapp 的脚本作为启动命令,然后查询其状态。然后,使用 logs 命令,您可以查看它是否正在运行。

于 2014-10-25T08:55:01.317 回答
1

只要您作为 docker run 的参数传递的命令,即只要“服务”程序正在运行,容器就会存在。

你可以在前台启动你的服务器,或者运行一个在后台启动服务器的命令(可能还有更多的事情)并继续做更多的事情,即在前台进行监控或监督以在服务器结束时重新启动服务器。

于 2014-10-25T13:00:32.437 回答