2015-11-16 5 views
5

मैं अंदर सिर्फ एक बैश स्क्रिप्ट के साथ डॉकर उबंटू कंटेनर चला रहा हूं।क्यों डॉकर निष्पादन बाहर निकलने पर नोहप प्रक्रिया को मार रहा है?

docker exec -it 0b3fc9dd35f2 ./main.sh 
मुख्य स्क्रिप्ट के अंदर

मैं जैसा कि यह एक लंबी चलने वाली अनुप्रयोग है nohup के साथ एक और आवेदन चलाना चाहते हैं:

#!/bin/bash 
nohup ./java.sh & 
#with this strange sleep the script is working 
#sleep 1 
echo `date` finish main >> /status.log 

जावा मैं उस तरह डोकर कार्यकारी के साथ अपने आवेदन कि कंटेनर के अंदर शुरू करना चाहते हैं .sh स्क्रिप्ट के रूप में अनुवर्ती है (सादगी के लिए यह एक डमी स्क्रिप्ट है):

#!/bin/bash 
sleep 10 
echo `date` finish java >> /status.log 

समस्या यह है कि java.sh डोकर कार्यकारी रिटर्न के तुरंत बाद मार डालता है। सवाल यह है कि क्यों?

मुझे पता चला कि एकमात्र समाधान कुछ डमी sleep 1 को दोबारा शुरू होने के बाद पहली स्क्रिप्ट में जोड़ना है। दूसरी प्रक्रिया से ठीक चल रहा है। क्या आपके पास कोई विचार है कि ऐसा क्यों है?

[संपादित करें]

दूसरा समाधान सिर्फ सोने से पहले कुछ echo या trap आदेश java.sh लिए स्क्रिप्ट जोड़ने की है। यह ठीक काम करता है। दुर्भाग्य से मैं इस वर्कअराउंड का उपयोग इस स्क्रिप्ट के बजाय जावा प्रक्रिया नहीं कर सकता।

+0

आप 'डोकर exec' के साथ एक कंटेनर शुरू नहीं है, लेकिन साथ एक 'डॉकर रन' और आपको डू में निर्देश 'सीएमडी' और 'एंटरपॉइंट' निर्देशों पर नज़र रखना चाहिए ckerfile – user2915097

+0

मैं पहले से ही विभिन्न प्रक्रिया के साथ कंटेनर चला रहा है। डॉकर exec के साथ मैं एक दूसरा शुरू करना चाहता हूँ। यह एकीकरण परिदृश्य जारी है इसलिए हम एक कंटेनर में और अधिक प्रक्रियाएं चाहते हैं। –

उत्तर

5

यह कोई जवाब नहीं है, लेकिन मेरे पास अभी भी टिप्पणी करने की आवश्यक प्रतिष्ठा नहीं है।

मुझे नहीं पता कि नोहप क्यों काम नहीं करता है। लेकिन मैं एक समाधान है कि काम किया, अपने विचारों का उपयोग कर किया:

docker exec -ti running_container bash -c 'nohup ./main.sh &> output & sleep 1' 
+0

धन्यवाद, यह मेरे लिए काम करता है। – mainframer

2

मैं जानता हूँ कि यह एक देर से प्रतिक्रिया है, लेकिन मैं इसे यहाँ प्रलेखन कारणों के लिए जोड़ देगा।

बैश पर nohup का उपयोग कर और एक डोकर कंटेनर पर 'Exec' के साथ इसे चलाने, तो आप का उपयोग करना चाहिए

$ docker exec -d 0b3fc9dd35f2 /bin/bash -c "./main.sh"

-d विकल्प का अर्थ है:

-d, - अलग मोड अलग करें: पृष्ठभूमि

डॉकर निष्पादन के बारे में अधिक जानकारी के लिए रन कमांड, देखें: https://docs.docker.com/engine/reference/commandline/exec/

यह चाल चलाना चाहिए।

1

ठीक है, ऊपर दो जवाब में शामिल हो: डी

पहले rcmgleite बिल्कुल सही कहते हैं:

-d

विकल्पों का उपयोग 'अलग' पृष्ठभूमि के रूप में इस प्रक्रिया को चलाने के लिए।

और दूसरा (सबसे महत्वपूर्ण!) यदि आप अलग प्रक्रिया चलाते हैं, तो आप की आवश्यकता नहीं है!

deploy_app.sh

#!/bin/bash 
cd /opt/git/app 
git pull 
python3 setup.py install 
python3 -u webui.py >> nohup.out 

एक कंटेनर के अंदर इस निष्पादित

docker exec -itd container_name bash -c "/opt/scripts/deploy_app.sh" 

की जाँच करें यह

$ docker attach container_name 
$ ps aux 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 0.0 0.0 11768 1940 pts/0 Ss Aug31 0:00 /bin/bash 
root  887 0.4 0.0 11632 1396 pts/1 Ss+ 02:47 0:00 /bin/bash /opt/scripts/deploy_app 
root  932 31.6 0.4 235288 32332 pts/1 Sl+ 02:47 0:00 python3 -u webui.py 
संबंधित मुद्दे