当前位置: 首页 > 知识库问答 >
问题:

找出docker容器不断重启原因的简单方法

潘灵均
2023-03-14

我有一个不断重启的docker容器;

           Name                         Command                 State                  Ports
--------------------------------------------------------------------------------------------------------
wenotecloudstorage_flask_1   /bin/sh -c /usr/local/bin/ ...   Restarting
wenotecloudstorage_nginx_1   nginx -g daemon off;             Up           0.0.0.0:2083->443/tcp, 80/tcp

我希望我有一个简单的方法来查看错误日志,了解它为什么重新启动。

我在Docker上读到:容器一直在重新启动

我试试;

docker logs --tail 50 --follow --timestamps wenotecloudstorage_flask_1
error from daemon in stream: Error grabbing logs: EOF

有没有一种简单的方法可以找出docker容器不断重启的原因?

共有3个答案

纪实
2023-03-14

这种情况今天发生在我身上,除了最简单的解决方法,我尝试了所有的方法

只需运行:docker-compose up--build

不带-d运行此操作如果有真正的错误,它将显示回溯

赵奕
2023-03-14

确保命令不退出

有同样的问题,容器一直在重新启动,但docker logsdocker-compose logs只是在循环中向我显示了干净的日志,没有关于重新启动的线索。

然后我意识到确实没有错误,它只是因为我添加到YML配置中的命令而退出。为了验证它,我在最后一个命令中附加了尾-f /dev/null,例如:

command: bash -c "nginx -t  && tail -f /dev/null"

而这一次,它熬夜了!

使用正确的命令

理论得到证实后,我使用< code > docker inspect $ image _ id 查找正确的< code>CMD,并使用正确的命令,例如:

command: bash -c "nginx -t && nginx -g 'daemon off;'"

它为什么会重启

两种可能的原因是,出现错误或命令提前退出。就我而言,是后者。我以前使用的图像已经有正确的<code>CMD</code>以上。但是我想添加一些额外的命令,而不必使用单独的dockerfile。

所以我放弃了dockerfile并使用了command,因为compose文件没有等价的< code>RUN(否则请纠正我)。但是,它“覆盖了容器映像声明的默认命令”,这是阻止容器提前退出的原因。

如何确定重新启动原因

看看docker ps的输出,我相信括号中的数字例如“重新启动(1)”是退出代码。您还可以在前台运行 docker-compose(未分离,即没有 -d),以便您可以实时查看日志和潜在的退出代码。

或者运行以下命令:

docker inspect $your_container_name | grep -i state -C 12

查找状态对象:

"State": {
    "Status": "restarting",
    "Running": true,
    "Paused": false,
    "Restarting": true,
    "Dead": false,
    "Pid": 0,
    "ExitCode": 0,
    "Error": "",
    ...
},

这里要寻找的主要内容是< code>ExitCode。如果它是0,并且没有< code >错误,则该命令可能会提前结束,即它没有作为服务运行。如果代码不为0,则存在实际的执行错误,您应该能够通过< code>docker-compose logs或< code>docker logs看到它。

韦原
2023-03-14

不要使用“泊坞窗日志”。使用“docker-compose 日志烧瓶”来查看重新启动容器的日志。使用您的选项:

docker-compose logs -f --tail=50 flask

您看到的错误是因为正常的“docker日志”正在尝试读取日志,但是容器已经死了。Docker-compose处理得更好。

如果它不在日志中,那么,那么您将不得不更深入地挖掘应用程序的配置。但我敢打赌,你会看到一个很好的日志消息,它将带你到正确的方向。

 类似资料:
  • 我今天使用应用程序容器/媒体维基泊出程序映像部署了MediaWiki的一个实例,我现在遇到了一个新问题,我找不到任何线索。尝试使用以下命令附加到媒体维基前端容器后: 由于我忽略的原因,它在我的配置中回答< code >终止,并尝试: 我确实收到了一些接近错误消息的内容: 这是我的新问题,因为这个容器永远不会停止重新启动。我可以看到,使用<code>docker ps-a。 问题是,我能够停止容器(

  • 问题内容: 我有一个在1G RAM主机中运行的Docker容器(也有在同一主机中运行的其他容器)。该Docker容器中的应用程序将解码一些图像,这可能会消耗大量内存。 该容器会不时退出。我怀疑这是由于内存不足,但不是很确定。我需要找到根本原因的方法。那么,有什么办法知道这个集装箱的死亡发生了什么? 问题答案: 其他人提到查看应用程序的输出。这永远是我要检查的第一件事。 接下来,您可以运行查看状态的

  • 我有一个循环中的python脚本 将AWS S3中的视频块下载到/filename 然后继续循环,直到AWS SQS队列为空。 剧本很棒!我已经运行了几个月了。硬盘空间会有所不同,但永远不会达到5%左右,这取决于视频的大小。 我决定把这个脚本放在docker容器中,运行docker compose,这样我就可以一次运行一堆脚本。 问题是硬盘充满了!我知道5运行磁盘上的空间会更高,但是当我完成处理后

  • 本文向大家介绍Android中断并重启一个Thread线程的简单方法,包括了Android中断并重启一个Thread线程的简单方法的使用技巧和注意事项,需要的朋友参考一下 这里简单的总结下(大概思路,没调试,可能会有错!): MyThread.java run函数里面必须有判断中断状态的while循环,外部在中断Thread时,必须显示调用interrupt()。注意:interrupte()函数

  • 以下是表格(简化): 以下是查询(简化): 死锁消息: 由多个进程并行执行的查询如何导致死锁 谢谢!