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,前者在容器退出後不會重啟,後者則始終重啟,即使手動停止容器也不會停止。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/158083.html