启动Docker守护进程,但不启动设置为自动重启的容器。

9
我的电脑上(Linux / Centos 7)Docker守护进程无法启动,我强烈怀疑是自动重启的容器造成了问题。如果我手动启动守护进程,我只看到最后一行是“Loading containers: start”,然后就挂起了。
我想做的是在不启动任何容器的情况下启动守护进程,但是我找不到任何选项可以实现这一点。Docker中是否有启动守护进程而不启动自动重启容器的选项?如果没有,有没有一种不需要运行Docker守护进程即可手动删除容器的方法?

2
如果您知道容器的ID,可以尝试在/var/lib/docker/containers/CONTAINER_ID/hostconfig.json手动更改其重启策略。这个方法是在这里提出的。 - tgogos
2个回答

2

我编写了这个小脚本,在启动docker之前停止所有容器。需要安装jq

for i in /var/lib/docker/containers/*/config.v2.json; do
  touch "$i.new" && getfacl -p "$i" | setfacl --set-file=- "$i.new"
  cat "$i" | jq -c '.State.Running = false' > "$i.new" && mv -f "$i.new" "$i"
done

2

我认为我们需要验证您正在使用的Docker存储驱动程序。Devicemapper已知存在与您描述的类似问题的一些问题。我建议将其更改为overlay2作为存储驱动程序。

如果您没有在生产系统上运行此操作,则可以尝试执行以下步骤以查看守护程序是否正在启动:

  1. 停止守护进程
  2. 清除docker主目录, 默认为 /var/lib/docker/*
  3. 您可能无法删除所有内容,在这种情况下,最好是停止自动启动的docker,使用命令 systemctl disable docker 并重新启动系统
  4. 系统启动后,再次执行第2步并尝试重新启动守护程序。希望一切都能正常启动。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接