के माध्यम से डॉकर कंटेनर को बंद करना मैं पर्यवेक्षक द्वारा supervisorctl stop all
के माध्यम से लॉन्च किए गए डॉकर कंटेनर को बंद करने में असमर्थ हूं। यहां तक कि supervisorctl status
के माध्यम से कंटेनर नीचे हैं, docker ps
और ps
इंगित करते हैं कि वे वास्तव में अभी भी चल रहे हैं।पर्यवेक्षक
supervisorctl stop <name>
के लिए कार्रवाई पर पर्यवेक्षक दस्तावेज़ीकरण से परामर्श से पता चलता है कि SIGTERM
प्रक्रियाओं को SIGKILL
के बाद भेजा जाता है यदि कुछ अनुग्रह अवधि के बाद भी चल रहा है। मैं इस मैन्युअल रूप से करने की कोशिश की और पाया कि
SIGTERM
एकdocker run
प्रक्रिया के लिए भेजा कुछ भीSIGKILL
नहीं करता है प्रक्रिया को मारने करता है, लेकिन वास्तव में डोकर अपडेट नहीं होता।docker ps
से पता चलता इस कंटेनर अभी भी चल रहा है- पर्यवेक्षक का
SIGKILL
कंटेनर
सवालों बंद नहीं करता है: मैं कैसे ठीक से पर्यवेक्षक द्वारा एक डोकर कंटेनर को बंद कर सकता हूँ?
शुरू स्थिति: foo-1
और bar-1
(मैं में GCE कंटेनर छोड़ दिया है, मामले में वे एक फर्क) द्वारा चलाए जा रहे
यहाँ मेरी प्रयोगों पर्यवेक्षक अनुकरण का परिणाम है। ps aux
और docker ps
सिंक में हैं।
[email protected]:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ba70bf8937f me/app:foo "/bin/sh -c 'supervi 5 minutes ago Up 5 minutes foo-1
e1a684bcfceb me/app:bar "/bin/sh -c 'supervi 5 minutes ago Up 5 minutes bar-1
fce5db0517df google/cadvisor:0.8.0 "/usr/bin/cadvisor" 35 minutes ago Up 35 minutes bbbb
db677eed47ef kubernetes/pause:go "/pause" 35 minutes ago Up 35 minutes 0.0.0.0:4194->8080/tcp aaaa
[email protected]:~$ ps aux | grep "docker run"
root 23358 0.0 0.1 124092 11856 pts/0 Sl 02:05 0:00 docker run --rm --name foo-1 ... -i me/app:foo
root 23365 0.0 0.1 124092 11928 pts/0 Sl 02:05 0:00 docker run --rm --name bar-1 ... -i me/app:bar
अनुकरण supervisorctl stop foo-1
प्रक्रिया को SIGTERM
भेज कर। परिणाम: प्रक्रिया अभी भी सक्रिय है।
[email protected]:~$ sudo kill -SIGTERM 23358
... <waiting> ...
[email protected]:~$ ps aux | grep "docker run"
root 23358 0.0 0.1 124092 11856 pts/0 Sl 02:05 0:00 docker run --rm --name foo-1 ... -i me/app:foo
root 23365 0.0 0.1 124092 11928 pts/0 Sl 02:05 0:00 docker run --rm --name bar-1 ... -i me/app:bar
[email protected]:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ba70bf8937f me/app:foo "/bin/sh -c 'supervi 6 minutes ago Up 6 minutes foo-1
e1a684bcfceb me/app:bar "/bin/sh -c 'supervi 6 minutes ago Up 6 minutes bar-1
fce5db0517df google/cadvisor:0.8.0 "/usr/bin/cadvisor" 36 minutes ago Up 36 minutes bbbb
db677eed47ef kubernetes/pause:go "/pause" 36 minutes ago Up 36 minutes 0.0.0.0:4194->8080/tcp aaaa
अगला बात पर्यवेक्षक करना होगा SIGKILL
जारी करने के है। परिणाम: प्रक्रिया मारे गए (ps aux
), लेकिन अभी भी चलने वाले डॉकर प्रक्रिया (docker ps
) के रूप में दिखाया जा रहा है।
[email protected]:~$ sudo kill -SIGKILL 23358
[email protected]:~$ ps aux | grep "docker run"
root 23365 0.0 0.1 124092 11928 pts/0 Sl 02:05 0:00 docker run --rm --name bar-1 ... -i me/app:bar
[email protected]:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ba70bf8937f me/app:foo "/bin/sh -c 'supervi 19 minutes ago Up 19 minutes foo-1
e1a684bcfceb me/app:bar "/bin/sh -c 'supervi 19 minutes ago Up 19 minutes bar-1
fce5db0517df google/cadvisor:0.8.0 "/usr/bin/cadvisor" 49 minutes ago Up 49 minutes bbbb
db677eed47ef kubernetes/pause:go "/pause" 49 minutes ago Up 49 minutes 0.0.0.0:4194->8080/tcp aaaa
पर्यवेक्षक ऊपर प्रयोग के दौरान बंद कर दिया गया (हस्तक्षेप करने के लिए अपनी स्वत: प्रारंभ व्यवहार से बचने के लिए)। प्रक्रिया में SIGKILL
को स्पष्ट रूप से भेजने के परिणाम पर्यवेक्षक द्वारा प्राप्त नहीं किए जा सकते थे; प्रक्रिया अभी भी जिंदा थी (भले ही पर्यवेक्षक अन्यथा राज्य लॉग करता है)। docker stop <container_id>
हालांकि कंटेनर को रोक दिया था।
अद्यतन
डोकर कंटेनर के अंदर भी एक supervisord
प्रक्रिया चल रहे हों जो कुछ प्रक्रियाओं का प्रबंधन करता है। शायद समस्या यह है कि संकेत प्रचारित नहीं कर रहे हैं और इस तरह इसे बंद नहीं होगा ...
अद्यतन 2
मैं इस समस्या को संकुचित होता है। मैं supervisord
शुरू करने के बजाय Dockerfile
से सीधे कंटेनर प्रक्रिया शुरू करने में सक्षम था और इससे कोई फर्क पड़ता है। मैं पर्यवेक्षक के माध्यम से इस कंटेनर को नियंत्रित करने में सक्षम हूं (डॉकर कंटेनर के बाहर एक जो कंटेनरों को नियंत्रित करता है)।
अद्यतन 3
stopasgroup=true
स्थापना के रूप में सुझाव here मेरे लिए कुछ भी नहीं बदलता है।
अद्यतन 4
मैं समस्याओं में से एक को हल करने में सक्षम था: supervisorctl
नहीं प्रक्रिया बंद करने में सक्षम किया जा रहा है। समस्या यह थी कि मैं पर्यवेक्षक कॉन्फ़िगरेशन फ़ाइल में command=sudo docker run...
के साथ डॉकर कंटेनर लॉन्च कर रहा था जिसने sudo docker run...
और docker run...
प्रक्रिया बनाई थी। supervisorctl stop...
ने वास्तविक डॉकर प्रक्रिया अभी भी चल रही थी, जबकि sudo docker run...
प्रक्रिया को समाप्त कर दिया था। जब मैं sudo
कमांड को छोड़ देता हूं, प्रति पर्यवेक्षक कार्यक्रम केवल 1 प्रक्रिया शुरू हो जाती है और supervisorctl stop
प्रक्रिया को समाप्त कर देता है।
एक समस्या यह बनी हुई है कि docker ps
दिखाता है कि कंटेनर अभी भी चल रहा है जबकि ps aux
नहीं है। विचित्र रूप से पर्याप्त कंटेनर अभी भी सक्रिय होने लगते हैं क्योंकि वे अनुरोधों का जवाब देते हैं। प्रक्रिया सूची पर एक त्वरित रूप से पुष्टि करता है कि डॉकर कंटेनर द्वारा उत्पन्न सभी प्रक्रियाएं अभी भी सक्रिय हैं, फिर भी docker run...
प्रक्रिया प्रक्रिया सूची से अनुपलब्ध है।
अद्यतन 5
docker run
प्रक्रिया को SIGTERM
, SIGHUP
या SIGQUIT
भेजा जा रहा है की प्रक्रिया के लिए कुछ भी करने को नहीं लगता है। केवल SIGKILL
डॉकर प्रक्रिया को ठीक से समाप्त करता है। पर्यवेक्षक को ठीक से अद्यतन किया जाता है, लेकिन docker ps
अभी भी डॉकर प्रक्रिया चल रहा है।
क्या आप पर्यवेक्षक कॉन्फ़िगरेशन फ़ाइलों का एक उदाहरण देखना संभव कर सकते हैं? मैं वही बात कर रहा हूं, और यहां तक कि 'सीएमडी ["निष्पादन योग्य"] का उपयोग कर, पर्यवेक्षक मेरे कंटेनरों को चलाता है। अब मैं चिंतित हूं कि मैं कंटेनर को पहले स्थान पर गलत तरीके से चला रहा हूं। –
निश्चित रूप से। मेरा अपडेट देखें। – orange
बहुत सराहना की! ओह, लेकिन क्या यह कंटेनर के अंदर पर्यवेक्षक के लिए फ़ाइल है, या बाहर? –