डॉकर-कंपोज़ में" पुनरारंभ: हमेशा " नीति कैसे काम करती है?

मेरे पास पोस्टग्रेएसक्यूएल और मेरे आवेदन के साथ डॉकर कंपोज़ फ़ाइल है, जैसे:

version: '3'services:  postgresql:    image: postgres:9.6.6    ports:      - 9932:5432    expose:      - "5432"    environment:      - POSTGRES_PASSWORD=pass    restart: always    volumes:      - /data:/var/lib/postgresql/data  myapp:    image: myapp    links:      - postgresql    depends_on:      - "postgresql"    restart: always    ports:      - "5000:5000"

समस्या यह है कि restart: always जब मैं कंटेनर को मारता हूं तो नीति काम नहीं करती है (ऐप क्रैश का उपयोग करके अनुकरण करना docker kill) और डॉकर-कंपोज़ मेरे कंटेनर को पुनरारंभ नहीं करता है, भले ही निकास कोड 137 है. जब मैं उपयोग करता हूं तो मैं उसी व्यवहार का निरीक्षण करता हूं restart: on-failure नीति। Versions 2 और 3 डॉकर-रचना का व्यवहार समान है। मेरा सिस्टम उबंटू सर्वर 16.04 एक्स 64 है ।

मेरे प्रश्न हैं:

  1. डॉकर-कंपोज़ दुर्घटनाग्रस्त (मारे गए) कंटेनर को पुनरारंभ क्यों नहीं करता है?
  2. कैसे जांचें कि पुनरारंभ नीति काम करती है या नहीं?

जब आप डॉकर किल का उपयोग करते हैं, तो यह अपेक्षित व्यवहार है क्योंकि डॉकर कंटेनर को पुनरारंभ नहीं करता है: "यदि आप मैन्युअल रूप से एक कंटेनर को रोकते हैं, तो इसकी पुनरारंभ नीति को तब तक अनदेखा किया जाता है जब तक कि डॉकर डेमॉन पुनरारंभ न हो जाए या कंटेनर मैन्युअल रूप से पुनरारंभ न हो जाए । यह पुनरारंभ लूप को रोकने का एक और प्रयास है" (संदर्भ)

यदि आप डॉकर स्टॉप या डॉकर किल का उपयोग करते हैं, तो आप मैन्युअल रूप से कंटेनर को रोक रहे हैं । आप पुनरारंभ नीतियों के बारे में कुछ परीक्षण कर सकते हैं: डॉकर डेमॉन को पुनरारंभ करना, अपने सर्वर को रिबूट करना, कंटेनर के अंदर सीएमडी का उपयोग करना और निकास चलाना । ..

उदाहरण के लिए यदि मैं अपने कंटेनर को पुनरारंभ नीति के साथ तैनात करता हूं, तो मैं देखता हूं कि यह कोड 137 से बाहर निकल गया है लेकिन इसे डॉकर पीएस-ए के अनुसार पुनरारंभ नहीं किया गया है, यह बाहर रहता है:

[root@andromeda ~]# docker ps --allCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES819d1264c30a        redis:alpine        "docker-entrypoint..."   3 minutes ago       Exited (137) 34 seconds ago                       keepalive_redis_1

लेकिन अगर मैं डेमॉन को पुनरारंभ करता हूं । ..

[root@andromeda ~]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES819d1264c30a        redis:alpine        "docker-entrypoint..."   30 minutes ago      Up 2 seconds        6379/tcp            keepalive_redis_1

कंटेनर स्थापित किया गया था कि के साथ पुनः आरंभ करने की नीति फिर से शुरू होता है जो क्या प्रलेखन कहते हैं, तो गोदी श्रमिक को मारने नहीं है, जिस तरह से आप चाहिए परीक्षण को पुनः आरंभ करने की नीति के रूप में यह मान लिया है कि आप जान-बूझकर बंद कर दिया कंटेनर और गोदी श्रमिक के लिए चाहता है एक तरीका है को रोकने के लिए शुरु छोरों, अगर तुम्हें मार, यह आप वास्तव में चाहते हैं, इसे मारने के लिए.

मुझे निम्नलिखित लिंक मूल्यवान मिले जो विभिन्न संस्करणों में समान व्यवहार दिखाते हैं (इसलिए यह बग नहीं बल्कि अपेक्षित व्यवहार है):

मैं कई बार वहां गया था, लेकिन जैसा कि आप देख सकते हैं, प्रलेखन मजबूत नहीं है और कोई स्पष्टीकरण नहीं है कि यह सुविधा कैसे काम करती है, इसलिए मैंने सवाल पूछा - मैं इस क्षेत्र में हाथों के अनुभव वाले किसी व्यक्ति से जवाब देखना चाहूंगा ।

Compose specification | Docker Documentation & Compose specification | Docker Documentation