原因:Docker的机制是让容器后台运行,必须至少有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),会自动退出
解决:可以使用包含 -g “daemon off;” 配置项的sh命令以前台方式开启nginx服务
nginx -c /usr/local/nginx/conf/nginx.conf -g "daemon off;"
如果容器需要同时启动多个进程,只需要将其中一个挂起到前台即可,例如:
service php-fpm start && nginx -g “daemon off;”
或
service php-fpm start && service nginx start && tail -f /var/log/nginx/error.log
如何解决”Docker ps -a 一直显示Exited”的问题
https://blog.51cto.com/u_16175474/6951223
问题描述
在使用Docker时,有时候会遇到一个常见的问题,即执行docker ps -a命令时,容器的状态一直显示为Exited。这可能让刚入行的开发者感到困惑。在本文中,我将向你解释为什么会出现这个问题,并提供解决方案。
问题原因
当容器状态显示为Exited时,这意味着容器启动后立即退出。这可能是由于多种原因引起的,包括容器的进程退出、启动命令错误、容器无法访问所需资源等。
解决方案步骤
为了解决这个问题,我们可以按照以下步骤进行操作:
步骤 操作
- 查看容器日志
- 检查容器启动命令
- 检查所需资源的可用性
- 重新启动容器
现在让我们逐步进行解释,并提供每个步骤需要执行的操作。
步骤 1:查看容器日志
首先,我们需要查看容器的日志,以了解容器为什么会退出。使用以下命令查看容器日志:
docker logs <容器ID>
1.
<容器ID>:容器的唯一标识符。
这将显示容器的日志输出。通常情况下,你将能够看到容器为什么退出的错误消息。根据错误消息,你可以采取相应的措施解决问题。
步骤 2:检查容器启动命令
接下来,我们需要确保容器的启动命令是正确的。使用以下命令检查容器的启动命令:
docker inspect <容器ID> | grep -i cmd
1.
<容器ID>:容器的唯一标识符。
这将显示容器的启动命令。确保命令正确,并且没有任何拼写错误。如果发现错误,可以使用以下命令重新设置容器的启动命令:
docker update –restart=always <容器ID>
1.
步骤 3:检查所需资源的可用性
容器可能会因为无法访问所需的资源而退出。例如,如果容器需要访问某个数据库,但数据库无法访问或配置不正确,容器可能会退出。确保所需的资源可用,并且容器可以正确访问它们。
步骤 4:重新启动容器
最后,如果以上步骤都没有解决问题,你可以尝试重新启动容器。使用以下命令重新启动容器:
docker restart <容器ID>
1.
<容器ID>:容器的唯一标识符。
这将重新启动容器并尝试解决问题。
总结
当Docker容器的状态一直显示为Exited时,我们可以按照上述步骤逐步排查并解决问题。首先查看容器的日志,了解为什么容器会退出;然后检查容器的启动命令,确保命令正确;接着检查所需资源的可用性;最后尝试重新启动容器。通过这些步骤,我们可以解决容器一直显示Exited的问题。