哪些镜像 dockerd 自动启动?

Max*_*kov 7 configuration containers docker

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

这是为什么?哪个配置文件/存储/任何内容保存有关应启动哪些映像的信息?

当我用 . 列出它们时,我有很多图像(~50)docker images。但当我启动时只有 8 个启动dockerd。为什么?我该如何解决这个问题?

谢谢。

BMi*_*tch 10

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

$ docker update --restart=... ${container_name_or_id}
Run Code Online (Sandbox Code Playgroud)

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

$ docker container ls -q | \
  xargs docker container inspect --format \
          '{{ .Name }}: {{.HostConfig.RestartPolicy.Name}}'
Run Code Online (Sandbox Code Playgroud)

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

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

on-failure[:max-retries] 仅当容器以非零退出状态退出时才重新启动。(可选)限制 Docker 守护进程尝试重新启动的次数。

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

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

即使您有意停止了容器,在 docker 守护进程重新启动后,重新启动策略always也会导致容器意外重新启动(如您所见)。因此,我通常创建具有unless-stopped重新启动策略的独立容器。


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

永久停止并删除服务:

$ docker service ls # to show the running services
$ docker service rm ${service_id_or_name}
Run Code Online (Sandbox Code Playgroud)

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

$ docker service update --replicas=0 ${service_id_or_name}
Run Code Online (Sandbox Code Playgroud)

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

$ docker stack ls # to show the defined stacks
$ docker stack rm ${stack_id_or_name}
Run Code Online (Sandbox Code Playgroud)


小智 1

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