2016-08-11 13 views
5

मैं अपने डोकर सिस्टम में नए healthcheck एकीकृत करने के लिए प्रयास करते हैं, लेकिन मैं वास्तव में कैसे सही तरीके से यह करने के लिए पता नहीं है:/डोकर healthcheck

समस्या है, मेरी डेटाबेस कंटेनर अधिक की जरूरत है शुरू करने और डेटाबेस को प्रारंभ करने के लिए समय तो कंटेनर जो मेरा मुख्य अनुप्रयोग शुरू करता है। नतीजतन: मुख्य कंटेनर अनुपलब्ध डेटाबेस कनेक्शन के कारण, सही शुरू नहीं होगा। मैंने कनेक्टिविटी के लिए डेटाबेस कंटेनर की जांच करने के लिए एक healthcheck.sh स्क्रिप्ट लिखी है, इसलिए कनेक्टिविटी उपलब्ध होने के बाद मुख्य कंटेनर बूटिंग शुरू हो जाता है। लेकिन मुझे पता है कि यह Dockerfile और मेरे डोकर-compose.yml में सही ढंग से एकीकृत करने के लिए न

healthcheck.sh की तरह है:

#!bin/bash 
COUNTER=0 
while [[ $COUNTER = 0 ]]; do 
    mysql --host=HOST --user="user" --password="password" --database="databasename" --execute="SELECT 1"; 
    if [[ $? == 1 ]]; then 
    sleep 1 
    echo "Let's sleep again" 
    else 
    COUNTER=1 
    echo "OK, lets go!" 
    fi 
done 

mysql कंटेनर Dockerfile:

FROM repository/mysql-5.6:latest 
MAINTAINER Me 

... some copies, chmod and so on 

VOLUME ["/..."] 

EXPOSE 3306 

CMD [".../run.sh"] 

HEALTHCHECK --interval=1s --timeout=3s CMD ./healthcheck.sh 

डोकर-लिखें .yml जैसे:

version: '2' 
services: 
    db: 
    image: db image 
    restart: always 
    dns: 
     - 10. 
    ports: 
     - "${MYSQL_EXTERNAL_PORT}:${MYSQL_INTERNAL_PORT}" 
    environment: 
     TZ: Europe/Berlin 
    data: 
    image: data image 

    main application: 
    image: application image 
    restart: always 
    dns: 
     - 10. 
    ports: 
     - "${..._EXTERNAL_PORT}:${..._INTERNAL_PORT}" 
    environment: 
     TZ: Europe/Berlin 
    volumes: 
     - ${HOST_BACKUP_DIR}:/... 
    volumes_from: 
     - data 
     - db 

इस डॉक्टर को मेरे डॉक्टर में एकीकृत करने के लिए मुझे क्या करना है काम करने के लिए ker-compose.yml फ़ाइल? या क्या मेरे मुख्य कंटेनर के कंटेनर स्टार्टअप में देरी करने का कोई अन्य मौका है?

Thx मार्कस

उत्तर

2

सामान्य तौर पर आपके आवेदन अनुपलब्ध संसाधनों से निपटने के लिए सक्षम होना चाहिए, लेकिन वहाँ भी कर रहे हैं कुछ ऐसे मामले शुरू जहां यह एक कंटेनर एक और "पूरी तरह से उपलब्ध हो" के लिए इंतजार करने के लिए बहुत सुविधाजनक है । डॉकर स्वयं आपके लिए इसे संभाल नहीं करता है, लेकिन कुछ स्क्रिप्ट के साथ वास्तविक कमांड में देरी करके संसाधन-कंटेनर में स्टार्टअप को संभालने के तरीके हैं।

पोस्टग्रेस्क्ल स्टार्टअप चेक के लिए एक अच्छा उदाहरण है जिसका उपयोग किसी भी कंटेनर में किया जा सकता है जिसे डेटाबेस को "पूरी तरह से शुरू" करने की प्रतीक्षा करने की आवश्यकता होती है। कृपया डोकर डॉक्स में नमूना कोड देखें: https://docs.docker.com/compose/startup-order/

+0

Danke एंड्रियास, दास hab ich wohl überlesen:

FROM base_image:latest RUN apt-get update RUN apt-get install -y curl EXPOSE 3306 

तो आप सभी की जरूरत चाहिए एक डोकर-compose.yml कि इस तरह दिखता है है – aTTraX

3

के बाद से डोकर-लिखें 1.10.0 आप अपने लिखें फ़ाइल में healthchecks निर्दिष्ट कर सकते हैं: https://github.com/docker/docker.github.io/blob/master/compose/compose-file.md#healthcheck

यह जो डोकर 1.12 के साथ

introducded कर दिया गया है https://docs.docker.com/engine/reference/builder/#/healthcheck का उपयोग करता है
+2

कंटेनरों के स्टार्टअप ऑर्डर को नियंत्रित करने के लिए आप डॉकर हेल्थ चेक का उपयोग कैसे करते हैं? यदि स्वास्थ्य कंटेनर के परिणामस्वरूप एक कंटेनर अस्वास्थ्यकर है, तो अन्य कंटेनर उस स्थिति को कैसे पढ़ सकता है और इसके आश्रित कंटेनर स्वस्थ होने तक अपने स्टार्टअप में देरी कर सकता है? –

1

मेरा मानना ​​है कि यह Docker Compose wait for container X before starting Y

जैसा है आपके db_image को कर्ल का समर्थन करने की आवश्यकता है।
कि ऐसा करने के लिए, अपने खुद के db_image बनाने के रूप में:

version: '2' 
services: 
    db: 
    image: db_image 
    restart: always 
    dns: 
     - 10. 
    ports: 
     - "${MYSQL_EXTERNAL_PORT}:${MYSQL_INTERNAL_PORT}" 
    healthcheck: 
     test: ["CMD", "curl", "-f", "http://localhost:${MYSQL_INTERNAL_PORT}"] 
     interval: 30s 
     timeout: 10s 
     retries: 5 
    environment: 
     TZ: Europe/Berlin 
    main_application: 
    image: application_image 
    restart: always 
    depends_on: 
     db: 
     condition: service_healthy 
    links: 
     - db 
    dns: 
     - 10. 
    ports: 
     - "${..._EXTERNAL_PORT}:${..._INTERNAL_PORT}" 
    environment: 
     TZ: Europe/Berlin 
    volumes: 
     - ${HOST_BACKUP_DIR}:/... 
    volumes_from: 
     - data 
     - db 
संबंधित मुद्दे