Docker:容器继续重新启动


108

今天,我使用appcontainers / mediawiki docker映像部署了MediaWiki实例,现在遇到了一个新问题,无法找到任何线索。在尝试使用以下方式附加到mediawiki前端容器后:

docker attach mediawiki_web_1

Terminated出于我忽略的原因,它在我的配置上做出回答,还尝试:

docker exec -it mediawiki_web_1 bash

我确实收到错误消息附近的内容:

Error response from daemon: Container 81c07e4a69519c785b12ce4512a8ec76a10231ecfb30522e714b0ae53a0c9c68 is restarting, wait until the container is running

这是我的新问题,因为此容器永不停止重新启动。我可以看到使用docker ps -a总是返回STATUS的状态Restarting (127) x seconds ago

问题是,我能够停止容器(我测试过),但是再次启动它似乎使它回到了重新启动的循环中。

知道这里可能是什么问题吗?直到我尝试附加它为止,整个过程都正常工作了。

我很伤心 :-(


我通过使用forums.docker.com/t/how-to-delete-cache/5753/2完全删除了整个Docker缓存而获得了成功(我还在-rmi中添加了-f标记)。然后,我重建了容器,它们起作用了。
alberto56 '16

对我来说,删除容器和图像是不够的(如@ alberto56的链接所述),我还必须删除关联的卷。一旦做到这一点,我就重新营业。
凯蒂·拜尔斯

Answers:


172

docker logs当您不以交互方式运行容器时,该命令将向您显示容器正在生成的输出。这可能包含错误消息。

docker logs --tail 50 --follow --timestamps mediawiki_web_1

您也可以在前台运行一个新容器,docker run -ti <your_wiki_image>以查看其作用。您可能需要将docker-composeyml的一些配置映射到docker命令。

我猜想,附加到媒体Wiki进程会导致崩溃,从而损坏您数据中的某些内容。


您提供的命令结果(可能与容器相关的最近50条日志)如下:2016-05-26T16:38:27.362409489Z * Stopping web server apache2 * 2016-05-26T21:49:11.376549083Z Terminated 2016-05-26T21:49:11.688655642Z /bin/bash: /tmp/.runconfig.sh: No such file or directory,所以您说对了,由于runco​​nfig.sh似乎消失了,数据中出现了一些损坏。我将尝试按照您的建议从前台再次运行该容器。只需查找如何指定25个正确的参数^^
Balessan

7
谢谢,运行一个新的容器完成了这项工作。Docker原本应该简化我的部署,但是现在这是一个很大的失败:-)我可能需要学习和尝试更多...
Balessan '16

我正在努力使MySQL工作。docker ps -a向我展示了它被卡在启动循环中,而您的命令向我展示了原因:无法删除的mysql目录中的文件。您从挽救我的头发中节省了数小时的时间。谢谢!
Blizzardengle

32

docker kill CONTAINER_ID不起作用并且docker stop -t 1 CONTAINER_ID也不起作用时,可以尝试删除容器:

docker container rm CONTAINER_ID

今天我遇到了类似的问题,其中容器处于连续的重新启动循环中。

就我而言,这个问题与我是一名贫穷的工程师有关。

无论如何,我通过删除容器,修复代码,然后重新构建并运行容器来解决此问题。

希望这对以后解决此问题的人有所帮助


4
我已经把错误的代码在我的应用程序,并在我的搬运工撰写的文件,我增加restart: always这给我留下泊坞窗的循环试图启动一个应用程序碎.. :(
Giannis Katsini

4

从个人经验来看,听起来您的Docker容器中存在一个问题,该问题不允许它重新启动。因此,容器中的某些进程导致重新启动挂起,或者某些过程导致容器在启动时崩溃。

启动容器时,如果要附加到容器,请确保以“ -d”分离的形式启动容器。(例如,“ docker run -d mediawiki_web_1”)


我假设使用docker-compose运行容器仍然将其分离,不是吗?或-d参数在我的配置文件中丢失。会检查的。
巴里桑

4

tl; dr正在重新启动,其状态码为127,表示您的容器中缺少文件/库。启动一个新的容器可能会解决它。

说明:

就我对Docker的了解而言,这是正在发生的事情:

  1. 容器尝试启动。在此过程中,它将尝试访问不存在的文件/库。
  2. 它以状态码退出,对此答案进行了127说明。
  3. 通常,这是容器应该完全退出的位置,但是它将重新启动。
  4. 之所以重新启动,是因为在启动容器时,必须将重新启动策略设置为no默认值)以外其他(使用命令行标志--restartdocker-compose.ymlkey restart)。

解决方案:某些东西可能损坏了您的容器。理想情况下,启动一个新的容器应该可以完成这项工作。


2

如果您创建的systemd服务具有以下情况,也可能是这种情况:

[Service]
Restart=always
ExecStart=/usr/bin/docker container start -a my_container
ExecStop=/usr/bin/docker container stop -t 2 my_container

1

在我的情况下,nginx容器一直在重新启动,我检查了nginx容器的日志,发现一个不需要的域的.crt和.key文件有错误,因此我分别删除了.conf文件,.crt和.key然后重新启动nginx。就是这样,nginx无需重新启动即可正常工作。


0

我忘记了Minikube在后台运行,这就是总是重新启动它们的原因



0

尝试将这些参数添加到您的docker yml文件中

restart: "no"
  restart: always
  restart: on-failure
  restart: unless-stopped
  environment:
    POSTGRES_DB: "db_name"
    POSTGRES_HOST_AUTH_METHOD: "trust"

最终文件应如下所示

postgres:
  restart: "no"
  restart: always
  restart: on-failure
  restart: unless-stopped
  image: postgres:latest
  volumes:
    - /data/postgresql:/var/lib/postgresql
  ports:
    - "5432:5432"
  environment:
    POSTGRES_DB: "db_name"
    POSTGRES_HOST_AUTH_METHOD: "trust"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.