2017-01-03 7 views
5

मैं चाहता हूँ समाप्त:कैसे एक स्क्रिप्ट निष्पादित करने के लिए जब मैं अपने कंसोल पर टाइप जब मैं एक डोकर कंटेनर

docker ^a docker container^ stop 

समाप्त करने से पहले एक स्क्रिप्ट को निष्पादित करने के लिए। क्या यह संभव है?

+0

क्या आप स्क्रिप्ट को कंटेनर के अंदर या होस्ट पर कंटेनर के बाहर निष्पादित करना चाहते हैं? कंटेनर के अंदर – R0MANARMY

+0

। –

उत्तर

8

डॉकर स्टॉप कमांड कंटेनर में रूट प्रक्रिया (पीआईडी ​​1) में सिगरेट सिग्नल भेजकर पहले चलने वाले कंटेनर को रोकने का प्रयास करता है। यदि समय समाप्ति अवधि के भीतर प्रक्रिया समाप्त नहीं हुई है तो सिग्कील सिग्नल भेजा जाएगा।

अभ्यास में, इसका मतलब है कि आप एक ENTRYPOINT स्क्रिप्ट, जो रोकना होगा (जाल) SIGTERM संकेत को परिभाषित करने और उचित रूप में किसी भी बंद तर्क निष्पादित करने के लिए है।

एक नमूना entrypoint स्क्रिप्ट कुछ इस तरह देख सकते हैं:

#!/bin/bash 

#Define cleanup procedure 
cleanup() { 
    echo "Container stopped, performing cleanup..." 
} 

#Trap SIGTERM 
trap 'cleanup' SIGTERM 

#Execute a command 
"${@}" & 

#Wait 
wait $! 

,

नोट (करने के लिए इंतजार खोल संकेत हैंडलिंग, सम्मान के साथ, अधिक जानकारी के here थोड़ा से समझाया गया है) के साथ कि उपरोक्त प्रविष्टि बिंदु, क्लीनअप तर्क केवल तभी निष्पादित किया जाएगा जब कंटेनर स्पष्ट रूप से बंद हो जाता है, अगर आप यह भी करना चाहते हैं कि अंतर्निहित प्रक्रिया/आदेश स्वयं (या विफल हो जाता है), तो आप इसे निम्नानुसार पुन: व्यवस्थित कर सकते हैं।

... 

#Trap SIGTERM 
trap 'true' SIGTERM 

#Execute command 
"${@}" & 

#Wait 
wait $! 

#Cleanup 
cleanup 
+0

ध्यान दें कि ENTRYPOINTmust _exec form_ में होना चाहिए PID 1: ENTRYPOINT ["निष्पादन योग्य", "param1", "param2"] [docs] (https://docs.docker.com/engine/reference/builder /#प्रवेश बिंदु) – Linuslabo

संबंधित मुद्दे