[英]Containers not restarted after update with restart always in docker-compose.yml
我有一些容器,它们在 docker-compose 文件中都有总是重启值,如下所示:
version: "3.7"
services:
container:
image: ghost:latest
container_name: some_container
restart: always
depends_on:
- ...
ports:
- ...
...
一旦操作系统(Flatcar Linux / CoreOS)自我更新,容器就不会重新启动。 但是如果我只是做$ sudo docker ps
所有容器都会立即启动。 这是怎么回事,我该如何修复它,以便我的容器在更新后自动重启?
编辑:
不确定我的问题有什么不清楚的地方, restart: always
打开。 除非我在文档中遗漏了一些重要的东西,否则即使重新启动 docker 守护程序(在操作系统重新启动之后),此命令也应该重新启动容器。
从下面复制我的评论:
好的,所以在这里帮帮我。 正如您在我的问题中看到的那样,我已经重新启动:始终打开。 所有这些容器都成功启动并且运行良好。 然后操作系统会自动更新并重新启动。 重新启动后,docker 守护程序将重新启动。 但是由于某些原因,我运行的容器 WITH
RESTART: ALWAYS
打开 DOES NOT START。 如果我此时进入我的服务器,输入sudo docker ps
列出我正在运行的容器,突然所有容器都启动了,我看到了列表。 那么为什么容器没有启动,即使守护进程正在运行呢?
从评论看来,docker 服务未配置为在启动时自动启动。 Docker 是一个客户端服务器应用程序,服务器从 systemd 运行,并为客户端使用的 docker 套接字提供单独的服务以与服务器通信。 因此,任何使用 docker 命令的调用都可能通过点击 docker 套接字来启动服务器。
systemd 中的服务状态可以通过以下方式检查:
systemctl status docker
或者您可能想检查:
systemctl is-enabled docker
它可以手动启动:
systemctl start docker
并且可以启用它以开始:
systemctl enable docker
以上所有命令都需要以root身份运行。
always
始终重新启动集装箱,如果它停止。 如果是手动停止的,则只有在Docker daemon重启时才会重启,或者容器本身是手动重启的。
unless-stopped
与always
类似,除了当容器停止(手动或其他方式)时,即使在 Docker 守护程序重新启动后也不会重新启动。
如果您有一个已经运行的容器想要更改其重启策略,您可以使用docker update command
来更改它,下面的命令将确保所有当前正在运行的容器将重新启动,除非停止
$ docker update --restart unless-stopped $(docker ps -q)
注意:使用重启策略时请记住以下几点
重启策略只有在容器启动成功后才会生效。 在这种情况下,成功启动意味着容器至少启动了 10 秒,并且 Docker 已经开始监控它。 这可以防止根本没有启动的容器进入重启循环。
如果您手动停止一个容器,它的重启策略将被忽略,直到 Docker 守护进程重启,或者容器被手动重启。 这是防止重新启动循环的另一种尝试。
重启策略仅适用于容器。 swarm 服务的重启策略配置不同
这需要 Docker 服务在启动时启动,而不是使用按需启动的默认套接字激活,就像您在执行“docker ps”时描述的那样
这是在禁用套接字激活的同时启用 Docker 服务所需的 Container Linux 配置:
systemd:
units:
# Ensure docker starts automatically instead of being socket-activated
- name: docker.socket
enabled: false
- name: docker.service
enabled: true
这是容器重启策略。 restart: always
如果容器停止,则restart: always
重新启动容器。 如果是手动停止,则只有在Docker daemon重启或容器本身手动重启时才会重启。 请查看这个链接restart_policy 。
如果之前已经创建了 docker 容器,则它的 [重启策略][1] 可能不会通过在 docker compose YAML 文件中进行更改来自动更新。 如果您更改 YAML 文件中的
Restart Policy<\/code> :
# cat docker-compose.yml
version: "3"
services:
<your-service>:
restart: always
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.