您的位置:

深入了解Docker Compose中的unless-stopped

Docker Compose是Docker官方编排工具,可以通过Docker Compose定义、启动和管理多个容器的集成应用程序。unless-stopped是Docker Compose的一个关键字,用于指定容器不应该在停止命令之后终止,只有在显式执行docker-compose down命令时才会终止。

一、使用unless-stopped保持服务运行

在Docker Compose中,通过在docker-compose.yml文件中指定unless-stopped属性,可以确保容器在运行docker-compose down命令之前一直运行。这对于需要持续运行的服务非常重要,例如数据库服务、消息代理服务等。

下面是一个使用unless-stopped属性的docker-compose.yml示例:

version: '3'
services:
  db:
    image: postgres
    restart: unless-stopped

在这个示例中,指定了一个名为db的服务,使用PostgreSQL镜像,并且设置了restart属性为unless-stopped。这样,当使用docker-compose up启动服务后,即使服务出现故障导致容器被停止,容器也会自动重启,保持服务的可用性。

二、理解unless-stopped和no

除了unless-stopped,Docker Compose还提供了另一个关键字no,用于指定容器在容器退出时不应该自动重启。尽管no和unless-stopped都可以防止容器在故障时重启,但它们之间有很大的区别。

no的作用是在容器退出之后不重启,而unless-stopped的作用是在容器退出并且未被手动停止时重启。如果手动停止了容器,即使使用unless-stopped指定了容器也不会重启。

例如,下面是一个使用no属性的docker-compose.yml示例:

version: '3'
services:
  db:
    image: postgres
    restart: no

如果在使用该docker-compose文件启动服务后,如果容器出现故障并退出,则该容器不会重启,而必须手动执行docker-compose up以重新启动容器。

三、理解unless-stopped和always

除了no和unless-stopped之外,Docker Compose还提供了另一个关键字always,用于指定容器始终重启。与unless-stopped不同,always不会受到手动停止的影响,并且即使docker-compose down命令也无法停止容器。

在使用always时需要注意,在某些情况下可能需要手动停止容器。例如,在升级容器时,可能需要先手动停止容器,然后再启动更新的容器。如果使用了always,您将无法手动停止容器。

下面是一个使用always属性的docker-compose.yml示例:

version: '3'
services:
  db:
    image: postgres
    restart: always

在这个示例中,指定了一个名为db的服务,使用PostgreSQL镜像,并且设置了restart属性为always。这样,容器将始终重启,无论是在出现故障时还是手动停止时。

四、总结

通过以上的介绍,我们了解了Docker Compose中restart的关键字,包括unless-stopped、no和always。对于需要长时间运行的服务,我们可以使用unless-stopped保证它在退出后能够自动重启。与之不同的是no和always,前者在容器退出后不会重启,后者则始终重启,即使手动停止容器也不会停止。