概述
在使用docker-compose進(jìn)行容器部署的時候,時常是需要對容器的啟動順序進(jìn)行編排,比如在應(yīng)用容器啟動前,需要先啟動數(shù)據(jù)庫的容器。通過對官方文檔的閱讀,發(fā)現(xiàn)在docker-compose中,可以使用depends_on配合健康檢查healthcheck來實現(xiàn)。
參考鏈接:
https://docs.docker.com/compose/compose-file/#depends_on
測試
假設(shè)有個應(yīng)用需要等待ElasticSearch啟動完成后,才開始啟動,那么我們可以使用以下方式來編寫docker-compose文件。
version: '3.3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
environment:
discovery.type: single-node
TZ: Asia/Shanghai
healthcheck:
test: ["CMD","curl","-f","http://localhost:9200"]
interval: 5s
timeout: 10s
retries: 3
start_period: 30s
app:
image: nginx
depends_on:
elasticsearch:
condition: service_healthy
注意,這個需要更新到docker-compose版本為v2.5.0以上才支持。
在服務(wù)elasticsearch沒有進(jìn)入healthy狀態(tài)時,app服務(wù)是不會啟動的
# docker-compose -f test.yaml ps
NAME COMMAND SERVICE STATUS PORTS
tmp-app-1 "/docker-entrypoint.…" app created
tmp-elasticsearch-1 "/usr/local/bin/dock…" elasticsearch running (starting) 9300/tcp
在服務(wù)elasticsearch啟動完成時,并且健康狀態(tài)為healthy,app服務(wù)才啟動文章來源:http://www.zghlxwxcb.cn/news/detail-524038.html
# docker-compose -f test.yaml ps
NAME COMMAND SERVICE STATUS PORTS
tmp-app-1 "/docker-entrypoint.…" app running 80/tcp
tmp-elasticsearch-1 "/usr/local/bin/dock…" elasticsearch running (healthy) 9300/tcp
總結(jié)
在使用百度的搜索這個問題的時候,發(fā)現(xiàn)大家也遇到類似的問題,但絕大多數(shù)采用的是wait-for的解決方法,這個可能應(yīng)該是舊版本不支持healthcheck檢查,但現(xiàn)在官方已經(jīng)支持,這種解決方式就應(yīng)該退出了,所以在遇到問題的過程中,還是閱讀最新的官方文檔才比較靠譜。文章來源地址http://www.zghlxwxcb.cn/news/detail-524038.html
到了這里,關(guān)于docker-compose 如何安排容器啟動的順序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!