更新后容器未重新启动,并且始终在 docker-compose.yml 中重新启动

jus*_*ser 12 docker coreos docker-compose

我有一些容器,它们在 docker-compose 文件中都具有始终重新启动值,如下所示:

version: "3.7"
services:

  container:
    image: ghost:latest
    container_name: some_container
    restart: always
    depends_on:
       - ...
    ports:
       - ...
...
Run Code Online (Sandbox Code Playgroud)

一旦操作系统(Flatcar Linux / CoreOS)自我更新,所有容器都不会重新启动。但如果我这样做,$ sudo docker ps所有容器都会立即启动。这是怎么回事?如何修复它以便我的容器在更新后自动重新启动?

编辑:

不确定我的问题不清楚的是什么,restart: always已打开。除非我在文档中遗漏了一些重要的内容,否则即使 docker 守护进程重新启动(操作系统重新启动后),此命令也应该重新启动容器。

我的评论的副本如下:

好吧,那就帮我一下吧。正如您在我的问题中看到的,我已重新启动:始终打开。所有这些容器均已成功启动并且运行良好。然后操作系统会自动更新并自行重新启动。重启后,docker 守护进程将重新启动。但由于某些原因,我运行的容器RESTART: ALWAYS无法启动。如果我此时进入我的服务器,键入sudo docker ps以列出我正在运行的容器,突然所有容器都会启动并且我会看到该列表。那么,即使守护进程正在运行,为什么容器没有启动呢?

BMi*_*tch 13

从评论看来,docker 服务未配置为在启动时自动启动。Docker 是一个客户端服务器应用程序,服务器从 systemd 运行,并为客户端使用 docker 套接字与服务器通信提供单独的服务。因此,任何使用 docker 命令的调用都可能导致服务器通过访问 docker 套接字来启动。

systemd 中的服务状态可以通过以下方式检查:

systemctl status docker
Run Code Online (Sandbox Code Playgroud)

或者您可能想检查:

systemctl is-enabled docker
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式手动启动:

systemctl start docker
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式启用它:

systemctl enable docker
Run Code Online (Sandbox Code Playgroud)

上述所有命令都需要以 root 身份运行。