docker-compose 失败时重新启动

Rob*_*air 3 docker docker-compose

我想在容器停止运行时自动重新启动容器(而不是运行图像)。

我看到的所有示例都提到了docker run,但我只想重新启动以前创建的容器。

我尝试将以下内容添加到 yml 文件中的服务定义中,但它没有执行任何操作:

restart: always
Run Code Online (Sandbox Code Playgroud)

ane*_*yte 9

我想restart: always没有做任何事情,因为您需要运行,docker-compose up以便它将创建一个具有此策略的新容器。Withrestart: always容器在任何情况下都会在未运行时重新启动。这不仅是在失败之后,而且是在重新启动之后。

使用重启策略是解决此问题的推荐方法,但它需要您重新创建容器一次才能应用该策略。如果您甚至不能容忍一次娱乐(有一些方法可以保留数据:请参阅docker cp, docker commit),您可以使用 cron 脚本:

* * * * * docker ps | grep -q container_name || docker start container_name
Run Code Online (Sandbox Code Playgroud)

每隔一分钟,这将检查容器是否已启动,如果未启动则重新启动它。

powershell 的片段:

if ( docker ps | Select-String -quiet container_name ) {} else { docker start container_name }
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以试试这个docker_restart_policy

\n
\xef\xbf\xbc\nversion: "3.9"\nservices:\n  redis:\n    image: redis:alpine\n    deploy:\n      restart_policy:\n        condition: on-failure\n        delay: 5s\n        max_attempts: 3\n        window: 120s\n
Run Code Online (Sandbox Code Playgroud)\n

  • 部署:部分仅在 docker swarm 部署中被接受,如果您将其作为 docker-compose up 命令运行,则不会被接受。 (20认同)