哪些图像 dockerd 会自动启动?

哪些图像 dockerd 会自动启动?

一旦我在 Ubuntu 机器上重新启动了 docker 服务,service docker restart它就会启动一些我没想到会启动的容器。

这是为什么?哪个配置文件/存储/任何其他东西都保存着有关应启动哪些图像的信息?

使用 列出图像时,我有很多图像(约 50 张)docker images。但启动 时只有 8 张图像启动dockerd。为什么?我该如何更改?

谢谢。

答案1

对于单个容器,您可以应用重启策略。这是在docker run --restart=...启动容器时设置的,或者restart: ...在 compose yml 文件中设置。您可以使用以下命令更改现有容器中的重启策略:

$ docker update --restart=... ${container_name_or_id}

要列出所有容器及其重启策略,您可以从 bash 运行以下命令:

$ docker container ls -q | \
  xargs docker container inspect --format \
          '{{ .Name }}: {{.HostConfig.RestartPolicy.Name}}'

重启策略您可以使用的是:

容器退出时不自动重启。这是默认设置。

失败时[:最大重试次数] 仅当容器以非零退出状态退出时才重新启动。(可选)限制 Docker 守护程序尝试重新启动的次数。

总是 无论退出状态如何,始终重新启动容器。当您指定 always 时,Docker 守护程序将无限期地尝试重新启动容器。无论容器的当前状态如何,容器也将始终在守护程序启动时启动。

除非停止 无论退出状态如何,始终重新启动容器,但如果容器之前已处于停止状态,则不要在守护进程启动时启动它。

重启策略always会导致容器在 Docker 守护程序重启后意外重启,就像您看到的那样,即使您有意停止了容器。出于这个原因,我通常使用unless-stopped重启策略创建独立容器。


如果您使用 docker swarm 模式,那么只要目标状态与当前状态不匹配,服务就会自动启动新容器。对于笔记本电脑中常见的单节点 swarm 集群,这意味着当您重新启动 docker 时容器将重新启动,但如果您只是停止或删除正在运行的容器,容器也会重新启动。

永久停止并删除服务:

$ docker service ls # to show the running services
$ docker service rm ${service_id_or_name}

如果服务配置了复制模式,而您只是想暂时停止它而不删除该服务,则可以将目标副本更新为 0:

$ docker service update --replicas=0 ${service_id_or_name}

服务可以作为堆栈的一部分进行部署。要删除整个堆栈:

$ docker stack ls # to show the defined stacks
$ docker stack rm ${stack_id_or_name}

答案2

这意味着您的某些容器将 RestartPolicy 设置为始终。这意味着容器必须始终处于启动状态。请检查这些有问题的容器,特别是检查 RestartPolicy 的值。

$ docker inspect container-name

这通常发生在创建容器时带有标志--restartalways

要禁用容器自动启动,请使用以下命令:

$ docker update --restart=no container-name

解决此问题的另一种方法是在启动容器时将 RestartPolicy 设置为unless-stopped。您可以阅读完整文档docker 更新

答案3

查看 docker 重启策略,例如--restart always。我猜你的一些容器正在使用它。检查你的 docker 服务启动脚本。你可以使用docker ps -a --no-trunc查看完整列表。

答案4

图像不会自动启动,但容器会。

service docker restart容器上停止或者开始带有--restart always标志的将在重启时自动重新启动。请通过 检查这些docker ps -a

如果您不想启动某个容器(即使是带有--restart always标志的容器),您只需要将其删除,docker rm container或者docker-compose down

相关内容