【问题标题】:Start the docker daemon without starting containers that set to restart automatically在不启动设置为自动重启的容器的情况下启动 docker 守护进程
【发布时间】:2018-09-12 12:44:49
【问题描述】:

docker 守护程序不再在我的计算机(Linux / Centos 7)上启动,我强烈怀疑设置为自动重启的容器在这种情况下是罪魁祸首。如果我手动启动守护进程,我看到的最后一行是“正在加载容器:启动”,然后它就挂起。

我想做的是在不启动 any 容器的情况下启动守护进程。但我找不到任何选择来做到这一点。 docker中是否有任何选项可以启动守护程序而不启动设置为自动重启的容器?如果没有,有没有办法手动删除不需要 docker 守护进程运行的容器?

【问题讨论】:

  • 如果你知道容器的id,你可以在/var/lib/docker/containers/CONTAINER_ID/hostconfig.json尝试“手动”改变它的重启策略。这是here提议的。

标签: docker


【解决方案1】:

我编写了这个小脚本来在 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 作为存储驱动程序。

    如果您没有在 prod 系统上运行它,您可以尝试执行以下步骤来查看守护程序是否启动,

    1. 停止守护进程
    2. 清理docker主目录,默认为/var/lib/docker/*
    3. 您可能无法删除所有内容,在这种情况下,安全的选择是停止 docker 自动启动,systemctl disable docker 并重新启动系统
    4. 系统启动后,再次执行步骤 2 并尝试重新启动守护程序。希望一切都会出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 2015-03-08
      • 2017-05-16
      • 2016-09-20
      • 2019-02-14
      • 2020-12-28
      • 2014-11-14
      相关资源
      最近更新 更多