如果容器自动崩溃,我想重新启动它。我不知道该怎么做。我有一个脚本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
答案 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
策略的地方。因此,不仅要了解语法,还要知道何时应用哪种策略以及每种策略的含义。