2015-02-19 14 views
5

का उपयोग करके एक शेल स्क्रिप्ट कैसे चलाएं मैं एक साधारण कंटेनर बनाने के लिए डॉकरफ़ाइल का उपयोग कर रहा हूं। यहाँ Dockerfile है:डॉकरफ़ाइल सीएमडी

FROM XXXXXXX:5003/base-java 

MAINTAINER XXXXX 

ADD pubsub/ /opt/pubsub/ 

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

run.sh की सामग्री इस प्रकार है:

#!/bin/bash 
nohup java -jar /opt/pubsub/publish.jar & 
nohup java -jar /opt/pubsub/subscribe.jar & 

यह pub/sub के लिए सरल जावा अनुप्रयोग है।

अब मेरे पास एक अन्य कंटेनर है जो खरगोशक चला रहा है और मैं 2 कंटेनर को जोड़ रहा हूं हालांकि मेरा प्रत्येक प्रयास अभी विफल रहा है और मेरा pub/sub कंटेनर शुरू नहीं होता है। क्या कोई सलाह दे सकता है कि इस मुद्दे को डीबगिन कैसे करें? किसी भी तरह डॉकर लॉग में कुछ भी नहीं है। sudo docker run -d -P --name pub_sub --link rabbitmq:rabbitmq1 image_pub_sub

और यहाँ है कैसे मैं अपने pub/sub कोड में अन्य नाम का उपयोग कर रहा

factory = new ConnectionFactory(); 
factory.setHost("rabbitmq1"); 
try { connection = factory.newConnection(); 
channel = connection.createChannel(); 
channel.queueDeclare("pub", true, false, false, null); 
} 
catch (IOException e) { // TODO Auto-generated catch block 
e.printStackTrace(); } 

मैं उम्मीद कर रहा था कि मेरी प्रकाशित कोड एक कतार बना देगा:

यहाँ कैसे मैं कंटेनर जोड़ने रहा है खरगोश कंटेनर में और संदेशों को धक्का देना शुरू करें। मेरा ग्राहक कोड मूल रूप से उसी खरगोश से कनेक्ट होगा और संदेशों को पढ़ना शुरू कर देगा।

e8a50d5aefa5  image_pub_sub:latest  "/opt/pubsub/run.sh"  32 minutes ago  Exited (0) 32 minutes ago  pub_sub 

तो इसका मतलब यह है मेरी कंटेनर नहीं है:

जब मैं कमांड कुछ नहीं होता यह सिर्फ नए कंटेनर और exits..When मैं sudo docker ps -a चलाने की एक लंबी आईडी प्रिंट चलाने के लिए, मैं निम्नलिखित देख सकते हैं चल रहा है।

अभी मैं निम्न आदेश का उपयोग कर एक नया कंटेनर लॉन्च करके /etc/hosts अद्यतन करके परीक्षण किया है: sudo docker run -i -t image_pub_sub /bin/bash। संशोधित इस नए कंटेनर के /etc/hosts और निम्न प्रविष्टि <IP_ADDRESS> rabbitmq1 जोड़ा गया है और मेरी स्क्रिप्ट /opt/pubsub/run.sh भाग गया और यह निम्नलिखित संदेश के साथ nohup फ़ाइल संलग्न कर देता है:

Message Sent 
[x] Received 'Hello' 
Message Sent 
Message Sent 
[x] Received 'Hello' 
+0

आप अधिक जानकारी प्रदान करने की जरूरत है; कंटेनरों को जोड़ने के लिए आपने किन आदेशों का उपयोग किया था, परिणाम क्या था और आपने क्या उम्मीद की थी? –

+0

कृपया इसे टिप्पणी के बजाय, प्रश्न में जोड़ें। और हमें बताएं कि जब आप आदेश चलाते हैं तो क्या होता है (क्या कंटेनर अभी भी चल रहा है? आप कैसे जानते हैं कि यह काम नहीं कर रहा है?)।इसके अलावा, कंटेनर में एक खोल प्राप्त करें और खरगोश कंटेनर से जुड़ने का परीक्षण करें। –

+0

धन्यवाद। फिलहाल यह स्पष्ट नहीं है कि आपके पास नेटवर्किंग समस्या है या कोड/rabbitmq समस्या है। क्या होता है यदि आप 'डॉकर exec -it pub_sub ping rabbitmq1' चलाते हैं? –

उत्तर

4

एक डोकर कंटेनर जब इसकी मुख्य प्रक्रिया पूर्ण बंद हो जाएगा। आपके मामले में, इसका मतलब है कि दो जावा एप्लिकेशन पृष्ठभूमि में फंसे जाएंगे (nohup कॉल के कारण) तो स्क्रिप्ट तुरंत पूरा हो जाएगी और कंटेनर बाहर निकल जाएगा।

कुछ समाधान कर रहे हैं:

  • तेज और सबसे आसान समाधान सिर्फ दूसरा जावा कॉल से nohup कॉल दूर करने के लिए है। इस तरह से दूसरी जावा एप्लिकेशन बाहर निकलने तक स्क्रिप्ट बाहर नहीं निकल जाएगी।
  • प्रक्रियाओं का प्रबंधन करने के लिए रनिट या पर्यवेक्षक जैसे प्रक्रिया प्रबंधक का उपयोग करें।
  • जार अलग कंटेनर में रखें और सीधे जावा पर कॉल करें (यह मेरे लिए सबसे अच्छा समाधान प्रतीत होता है)।
+0

हाय एड्रियन, इस मंच में पोस्ट करते समय मुझे पहले ettiquetes के साथ मदद करने के लिए बहुत बहुत धन्यवाद। दूसरा, इस मुद्दे को हल करने के कई तरीकों को प्रदान करने के लिए एक सुपर धन्यवाद। इन सभी पर मेरी प्रतिक्रिया यहां दी गई है। 1) पहला एक त्वरित था, मैंने बस अपने कंटेनर को आवश्यक परिवर्तनों के साथ पुनर्निर्मित किया और यह काम किया :) – ashishjain

+0

2) अभी तक कोशिश नहीं की गई है, लेकिन मेरी समझ यह है कि यह सही है या नहीं। Supervisor.conf का प्रयोग करें और इसे जावा प्रक्रियाओं के साथ संलग्न करें। अब डॉकरफाइल सीएमडी ["/ usr/bin/supervisord"] का उपयोग कर पर्यवेक्षक प्रक्रिया शुरू करें। चूंकि यह एक कभी खत्म होने वाली प्रक्रिया नहीं है जो मुझे लगता है। 3) 2 अलग कंटेनरों में जार जोड़ने के लिए इसे 2 अलग कंटेनर बनाने की आवश्यकता नहीं होगी। जावा के साथ मेरे कस्टम निर्माण कंटेनर में से प्रत्येक 730 एमबी स्पेस ले रहा है। सिर्फ यह जानना चाहता था कि आप इसे सबसे अच्छा विकल्प क्यों मानते हैं। – ashishjain

+0

@ user1507003 2) हां, मुझे लगता है कि यह इसके बारे में है 3) यदि आप दोनों कंटेनरों के लिए समान आधार छवि का उपयोग करते हैं, तो वहां कोई अतिरिक्त स्थान नहीं होगा। प्रति कंटेनर में 1 प्रक्रिया होने के लिए यह अधिक मूर्खतापूर्ण है और यह आपके वितरित कोड के साथ अच्छी तरह से फिट होगा। –

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