自动崩溃时重启Docker容器

时间:2016-10-18 13:10:28

标签: docker docker-compose docker-container

如果容器自动崩溃,我想重新启动它。我不知道该怎么做。我有一个脚本docker-compose-deps.yml,它有elasticsearch,redis,nats和mongo。我在终端中运行它来设置它:docker-compose -f docker-compose-deps.yml up -d。在此之后,我通过运行docker-compose up -d来设置我的容器。有没有办法让这些容器在崩溃时重启?我注意到docker有一个内置的重启,但我不知道如何实现它。

在收到一些反馈后,我将restart: always添加到了我的docker-compose文件和我的docker-compose-deps.yml文件中。这看起来是否正确?或者这是你将如何实现重启?

docker-compose sample

myproject-server:
  build: "../myproject-server"
  dockerfile: Dockerfile-dev
  restart: always
  ports:
  - 5880:5880
  - 6971:6971
  volumes:
  - "../myproject-server/src:/src"
  working_dir: "/src"
  external_links:
  - nats
  - mongo
 - elasticsearch
 - redis
myproject-associate:
  build: "../myproject-associate"
  dockerfile: Dockerfile-dev
  restart: always
  ports:
  - 5870:5870
  volumes:
  - "../myproject-associate/src:/src"
  working_dir: "/src"
  external_links:
  - nats
  - mongo
  - elasticsearch
  - redis

docker-compose-deps.yml sample

nats:
  image: nats
  container_name: nats
  restart: always
  ports:
  - 4222:4222
mongo:
  image: mongo
  container_name: mongo
  restart: always
  volumes:
  - "./data:/data"
  ports:
  - 27017:27017

2 个答案:

答案 0 :(得分:5)

如果你正在使用compose,它有一个重启标志,类似于docker run命令中存在的标志,所以你可以使用它。以下是有关此部分的文档的链接 - https://docs.docker.com/compose/compose-file/

部署时,它取决于您部署到的位置。大多数容器集群(如kubernetes,mesos或ECS)都有一些配置可用于自动重启容器。如果您不使用这些工具中的任何一个,那么您可能需要手动启动容器,然后就像在本地一样使用重启标志。

答案 1 :(得分:1)

对我很好。在处理Docker策略时,您想要了解的是每个含义。 always策略意味着,如果由于任何原因而崩溃,则会自动重新启动。

因此,如果它由于某种原因停止运行,请继续并重新启动它。

那么您为什么要使用always而不是说on-failure

在某些情况下,您可能一直想要确保容器正在运行,例如Web服务器。如果您正在运行公共Web应用程序,那么您是否希望该服务器100%可用。

因此对于Web应用程序,我希望您要使用always。另一方面,如果您正在文件上运行辅助进程,然后自然退出,那么这对于on-failure策略来说将是一个很好的用例,因为辅助容器可能已经完成了文件处理,并且您可能想要让它关闭而不重启。

那是我期望使用on-failure策略的地方。因此,不仅要了解语法,还要知道何时应用哪种策略以及每种策略的含义。