繁体   English   中英

"更新后容器未重启,docker-compose.yml 中始终重启"

[英]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-stoppedalways类似,除了当容器停止(手动或其他方式)时,即使在 Docker 守护程序重新启动后也不会重新启动。

如果您有一个已经运行的容器想要更改其重启策略,您可以使用docker update command来更改它,下面的命令将确保所有当前正在运行的容器将重新启动,除非停止

$ docker update --restart unless-stopped $(docker ps -q)

注意:使用重启策略时请记住以下几点

  1. 重启策略只有在容器启动成功后才会生效。 在这种情况下,成功启动意味着容器至少启动了 10 秒,并且 Docker 已经开始监控它。 这可以防止根本没有启动的容器进入重启循环。

  2. 如果您手动停止一个容器,它的重启策略将被忽略,直到 Docker 守护进程重启,或者容器被手动重启。 这是防止重新启动循环的另一种尝试。

  3. 重启策略仅适用于容器。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM