首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新后未重新启动的容器总是在docker-compose.yml中重新启动

更新后未重新启动的容器总是在docker-compose.yml中重新启动
EN

Stack Overflow用户
提问于 2020-11-02 11:22:19
回答 5查看 10.3K关注 0票数 7

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

代码语言:javascript
复制
version: "3.7"
services:

  container:
    image: ghost:latest
    container_name: some_container
    restart: always
    depends_on:
       - ...
    ports:
       - ...
...

一旦操作系统(平板车Linux / CoreOS)更新了自己,容器就没有重新启动。但是如果我只做$ sudo docker ps,所有的容器都会同时启动。如何修复它,以便在更新后自动重新启动容器?

编辑:

不知道我的问题是什么,restart: always被打开了。除非我在文档中遗漏了一些重要的东西,否则这个命令应该重新启动容器,即使重新启动了docker守护进程(在os重新启动之后)。

以下是我的一份评论:

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-11-16 23:41:51

从注释中可以看出,停靠服务未配置为在启动时自动启动。Docker是一个客户端服务器应用程序,服务器从systemd运行,带有一个单独的服务,用于客户端与服务器对话时使用的docker套接字。因此,任何带有docker命令的调用都有可能通过点击docker套接字导致服务器启动。

系统d中的服务状态可以使用以下方法进行检查:

代码语言:javascript
复制
systemctl status docker

或者你可以检查一下:

代码语言:javascript
复制
systemctl is-enabled docker

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

代码语言:javascript
复制
systemctl start docker

它可以从以下几个方面开始:

代码语言:javascript
复制
systemctl enable docker

以上所有命令都需要作为root运行。

票数 7
EN

Stack Overflow用户

发布于 2020-12-17 20:09:28

这要求Docker服务在启动时启动,而不是使用按需启动的默认套接字激活,就像执行"docker ps“一样。

以下是在禁用套接字激活的同时启用Docker服务所需的:

代码语言:javascript
复制
systemd:
  units:
    # Ensure docker starts automatically instead of being socket-activated
    - name: docker.socket
      enabled: false
    - name: docker.service
      enabled: true
票数 3
EN

Stack Overflow用户

发布于 2020-11-16 17:45:43

如果容器停止,always总是重新启动它。如果它是手动停止的,则只在Docker守护进程重新启动或容器本身手动重新启动时才重新启动。

unless-stopped类似于always,只不过当容器停止(手动或其他方式)时,即使Docker守护进程重新启动,也不会重新启动它。

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

代码语言:javascript
复制
$ docker update --restart unless-stopped $(docker ps -q)

注意:在使用重新启动策略时要记住以下几点

  1. 重新启动策略仅在容器成功启动后生效。在这种情况下,成功启动意味着容器至少要运行10秒,而Docker已经开始监视它。这样可以防止一个根本不启动的容器进入重新启动循环。
  2. 如果手动停止容器,则会忽略它的重新启动策略,直到Docker守护进程重新启动,或者容器被手动重新启动。这是另一次阻止重新启动循环的尝试。
  3. 重新启动策略仅适用于容器。群服务的重新启动策略配置不同。

文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64644587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档