/ / एक डॉकक्रॉन्टेनर के अंदर गोलांग वेबसर्वर शुरू करना - बाश, उबंटू, जाओ

एक डॉकक्रॉन्टेनर के अंदर गोलांग वेबसर्वर शुरू करना - बाश, उबंटू, जाओ

मैं एक सेवा बनाने की प्रक्रिया में हूं, जिसमें अन्य चीजों के साथ, उपयोगकर्ताओं को इच्छा पर गोलांग वेब सर्वर शुरू / बंद करने की अनुमति मिलती है। एक समान परिस्थितियों में चलने वाले नोडजेस सर्वर को प्राप्त करने के लिए मैं बस एक जारी करता हूं nodejs /path/to/index.js &disown कंटेनर शुरू होने पर मैं बैच फ़ाइल के भीतर से चलाता हूं। आवश्यक बिट्स

ADD gorun.sh /usr/local/bin/gorun.sh
RUN chmod +x /usr/local/bin/gorun.sh

...
ENTRYPOINT ["/bin/bash"]
CMD ["/usr/local/bin/gorun.sh"]

यह हर बार पूरी तरह से काम करता है। में gorun.sh मेरे पास है nodejs /path/to/index.js & disown लाइन।

अब जब मैं गोलांग वेब सर्वर को इसी तरह की स्थितियों के तहत चलाने की कोशिश कर रहा हूं, मैंने सोचा कि मैं एक ही दृष्टिकोण की कोशिश करूंगा। मैंने पढ़ने के लिए gorun.sh स्क्रिप्ट को संशोधित किया

#! /bin/bash
go run /path/to/index.go & disown;
ps aux | grep go

अब अजीब चीज है। मैंने गो सर्वर को दो तरीकों से शुरू करने का प्रयास किया है

  • एक प्रयोग के रूप में मैंने डॉकर कंटेनर को टर्मिनल से जुड़े टर्मिनल के साथ शुरू किया gorun टर्मिनल से गोलांग सर्वर तुरंत निकाल दिया गया और सब कुछ हंकी-डोरी था।
  • चीजों को असली तरीके से काम करने के तरीके को बेहतर तरीके से अनुकरण करने के लिएदुनिया - मैंने एक पूर्व निर्धारित स्थान पर एक फ़ाइल, startgo.txt रखा है जिसे फिर एक सीआरओएन नौकरी द्वारा उठाया जाता है जो गोरुन को कॉल करता है। इस बार दौर, कोई खुशी नहीं - सर्वर शुरू नहीं होता है।

क्यों न सिर्फ कॉल करें go run /path/to/index.go & disown डॉकर कंटेनर स्टार्टअप स्क्रिप्ट से? कोशिश की कि भी वही परिणाम: सर्वर शुरू नहीं होता है।

यह मुझे स्पष्ट नहीं है कि यहां क्या हो रहा है। गोलांग सर्वर बिंदु को खाली करने से इनकार करते समय नोडेज सर्वर क्यों आग लगती है? यदि मैं एक ही स्क्रिप्ट को टर्मिनल के भीतर से चलाता हूं तो यह क्यों उड़ाता है? मैं इन मुद्दों के साथ किसी भी मदद की सराहना करता हूं।

उत्तर:

उत्तर के लिए -3 № 1

इस मुद्दे ने मुझे झुकाव के साथ मोड़ के चारों ओर घुमायाक्या हो रहा था यह जानने के लिए समय सीमा और मुझे 24 घंटे का समय लगा। समस्या एक सूक्ष्म है। तो यहां इस धागे में चल रहे किसी के लाभ के लिए एक स्पष्टीकरण है।

कभी नहीं भूलें: गोलांग के लिए अपने जादू को वितरित करने के लिए ओएस को करना हैइसे खोजने में सक्षम हो। $ GOPATH पर्यावरण परिवर्तक दर्ज करें। यदि आप मेरे जैसे कुछ हैं तो आप नेट पर कहीं भी निर्देशों का पालन करेंगे कि यह कैसे करें। मैंने निर्देशों का पालन किया ये पद वल्टर पर वे जो सुझाव देते हैं उसका सारांश

echo export GOPATH=/opt/gopkg >> ~/.bashrc
echo export GOROOT=/opt/go >> ~/.bashrc
echo export PATH=$PATH:$GOROOT/bin:$GOPATH/bin >> ~/.bashrc

उत्कृष्ट निर्देश - धन्यवाद वल्टर।

कुंजी Isssue

जैसा कि मैंने अपने मूल प्रश्न में उल्लेख किया है कि मुझे क्या परेशान था कि जब मैंने बैच फ़ाइल निष्पादित की थी gorun युक्त

go run /path/to/index.go &

डॉकर सत्र से जुड़े एक टर्मिनल सत्र से यह काम किया। हालांकि, जब मैंने डॉकर सत्र की शुरुआत में निष्पादित एक बैश स्क्रिप्ट से इसे निष्पादित करने का प्रयास किया, तो ऐसा नहीं हुआ।

जब आप इस बारे में कुछ सोचते हैं और ऊपर दिए गए वल्टर निर्देशों में क्या हो रहा है, यह सब अंधेरे से स्पष्ट है। पथ चर सेट किया जा रहा है केवल जब एक संवादात्मक टर्मिनल खुला होता है! - यानी जब आप निष्पादित करने का प्रयास नहीं करते हैं go dosomething किसी भी पुराने बैच फ़ाइल से निर्देश - उदाहरण के लिए जब आप डॉकर कंटेनर लॉन्च करते हैं तो आप चलाते हैं।

यदि आप गोलांग को डॉकर कंटेनर के भीतर से सही तरीके से संचालित करना चाहते हैं तो बाश स्क्रिप्ट के शीर्ष पर आप कंटेनर स्टार्टअप पर चलते हैं, आपको समस्या जारी करने की आवश्यकता होगी

export GOPATH="/opt/gopkg";
export GOROOT="/opt/go";
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin;