Docker-Compose重启策略

Ken*_*n J 54 docker

我查看了docker-compose的文档,我看到版本3有一个部署重启策略,但它只适用于swarm.我尝试在我的服务上设置restart_policy但出现此错误:

ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services.web: 'restart_policy'
Run Code Online (Sandbox Code Playgroud)

有没有办法在使用群集外的docker-compose创建的服务上设置重启策略?

小智 84

它看起来像文档中的差距

在第3版中,我们仍然可以在v.2中使用与之前相同的"重启"服务(除了部署到swarm中)

version: '3'
services:
  my-service:
    restart: on-failure:5 
Run Code Online (Sandbox Code Playgroud)

  • 我没有看到`:5`作为API的文档部分.我错过了吗?你能澄清一下这个意图吗? (5认同)
  • 它们似乎在文档中[修复了这个差距](https://docs.docker.com/compose/compose-file/#restart).:5仍未记录,显然是"最大重试次数".我这样使用它:`restart:除非停止:5`并且得到_maximum重试计数不能用于重启策略'除非停止'.我把0改为5而不是5 (4认同)
  • 最大重试次数(未记录)可在源代码中找到[here](https://github.com/docker/compose/blob/f85950ebecfa21b3760756be93867c17a8770d43/compose/config/types.py#L85)。 (2认同)

Dan*_*owe 75

版本2使用restart关键字支持重启策略,如果您不需要Swarm(您说您不需要/想要),它应该可以正常工作.

version: '2'
services:
  web:
    image: apache
    restart: always
Run Code Online (Sandbox Code Playgroud)

https://docs.docker.com/compose/compose-file/compose-file-v2/

Compose格式版本3有一个名为的参数restart_policy,但据我从文档中可以看出它仅作为部分有效deploy,仅在部署到Swarm时使用.因此版本3在您的情况下可能没用.

  • @ cricket_007`reb restart_policy`是`deploy`的子选项,docs中的`deploy`表示"这只在使用`docker stack deploy`部署到一个群时生效,并被`docker-compose up`忽略`docker-compose run`." (6认同)
  • 现在版本 3 还支持 `restart`:https://github.com/compose-spec/compose-spec/blob/master/spec.md#restart (3认同)
  • 来自文档的@ cricket_007 AFAICT,`restart_policy`仅在`deploy`内部有效,甚至在执行Swarm时也使用。由于OP询问使用Swarm的_not_问题,我觉得我原来的回答应该保持原样。 (2认同)

小智 5

即使你不是在群模式,有一个叫做选项--compatibility这将与restart_policy,这将尝试重新启动,即使您没有部署。唯一的故障是“延迟”“窗口”的子键将被忽略。这是一个例子:

version: '3.7'
services:
  build:
    context: .
    dockerfile: Dockerfile
  container_name: example
  deploy:
    restart_policy:
      condition: on-failure
      max-attempts: 3
Run Code Online (Sandbox Code Playgroud)

运行以下命令:

docker-compose -f docker-compose.yml --compatability up
Run Code Online (Sandbox Code Playgroud)

  • 从文档中:不要在生产中使用它!https://docs.docker.com/compose/compose-file/compose-versioning/#compatibility-mode (2认同)