Docker:Container再次重新启动

时间:2016-05-26 22:14:41

标签: docker

我今天使用appcontainers / mediawiki docker image部署了一个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始终返回Restarting (127) x seconds ago的状态。

问题是,我能够停止容器(我测试过)但是再次启动容器似乎会将其重新启动到重启循环中。

知道这里有什么问题吗?整个过程都是正常工作,直到我试图附加它...

我很伤心: - (

13 个答案:

答案 0 :(得分:84)

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

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

您还可以使用docker run -ti <your_wiki_image>在前台运行一个新容器来查看它的作用。您可能需要将docker-compose yml中的某些配置映射到docker命令。

我猜想附加到媒体wiki进程会导致崩溃,导致数据中出现问题。

答案 1 :(得分:20)

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

docker container rm CONTAINER_ID

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

我案中的问题与我是一名糟糕的工程师有关。

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

希望这有助于任何人在未来遇到这个问题

答案 2 :(得分:3)

根据个人经验,您的docker容器中存在一个问题,即不允许它重新启动。因此容器内的某些进程导致重新启动挂起或某些进程导致容器在启动时崩溃。

当您启动容器时,请确保将其启动并分离#34; -d&#34;如果你要附加它。 (例如&#34; docker run -d mediawiki_web_1&#34;)

答案 3 :(得分:3)

tl; dr 它以状态代码127重新启动,这意味着您的容器中缺少文件/库。启动一个新的容器可能会解决它。

说明:

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

首先检查日志,为什么容器失败。因为您的重新启动策略可能会使您的容器回到运行状态。最好解决此问题,然后您可能会构建带有/没有修复的新映像。稍后执行以下命令

docker system prune

https://forums.docker.com/t/docker-registry-in-restarting-1-status-forever/12717/3

答案 8 :(得分: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"

答案 9 :(得分:0)

就我而言,我删除了

Restart=always

已添加

tty: true

并执行以下命令以打开外壳程序(守护进程,因为docker会读取组成文件并在到达文件的最后一行时停止容器)。

docker-compose up -d

答案 10 :(得分:0)

尝试运行

docker stop CONTAINER_ID docker rm -v CONTAINER_ID

谢谢

答案 11 :(得分:0)

在 dev 中长时间运行后,将代码部署到 prod 服务器后,我遇到了同样的问题 问题是在我的 docker-compose.yml 文件中,我没有为 mongo 图像指定标签,默认情况下它会提取最新的,并且由于我想保留数据路径,因此 mongo 版本之间存在不匹配 在 dev 上是 4.4.3,在 prod 中它拉了最新的(我猜是 5.x) 我的解决方案是将图像指定为 mongo:4.4.3 而不仅仅是 mongo

我不想走升级数据库的道路

答案 12 :(得分:-2)

检查你安装了docker的分区。在大多数情况下,分区的容量为 100%,因此您可能需要调查一下。