पर डीबग की अनुमति देगा, मैं इसे यहां चलाने में कामयाब रहा। काश मैं नोड-इंस्पेक्टर को साइडकिक कंटेनर के रूप में चला सकता हूं, यह इतना साफ होगा (संपादित करें: यह संभव है, उत्तर का अंत देखें)। दुर्भाग्यवश, नोड-इंस्पेक्टर स्रोतों को देखते हुए, नोड-इंस्पेक्टर को दूरस्थ रूप से चलाने के लिए संभव नहीं है (क्योंकि नोड-इंस्पेक्टर को फ़ाइलों तक पहुंचने की आवश्यकता होती है ताकि यह उन्हें प्रदर्शित कर सके) ताकि कंटेनर लिंकिंग विंडो से बाहर हो। शायद यह किसी बिंदु पर इसका समर्थन करेगा।
Dockerfile में, नोड निरीक्षक स्थापित:
यहाँ मेरी समाधान है। मैंने इसे वैश्विक बनाने का फैसला किया ताकि मैं अपने सभी ऐप्स को डीबग करने के लिए उसी कंटेनर का उपयोग कर सकूं।
RUN npm install -g node-inspector
इसके बजाय
CMD
आदेश में नोड लंच लेने के
, एक bash स्क्रिप्ट आप एक ही प्रक्रिया से भी अधिक का शुभारंभ करने देगा कि का उपयोग करें। यह डॉकर तरीका नहीं है लेकिन जैसा कि मैंने कहा है, नोड-इंस्पेक्टर में सीमा हमें साइडकिक कंटेनर का उपयोग करने से रोकती है। आप प्रक्रिया प्रबंधन के लिए supervisor जैसे अधिक मजबूत समाधान का भी उपयोग कर सकते हैं लेकिन एक साधारण लिपि डिबग करने के लिए मेरी राय में पर्याप्त है।
CMD ["/bin/bash", "start.sh"]
एक DEBUG
वातावरण चर की उपस्थिति के लिए यह स्क्रिप्ट की जाँच करता नोड का शुभारंभ और डिबग सक्षम करने के लिए।
#!/bin/bash
if [ -z ${DEBUG+x} ]; then
node server.js
else
node-inspector --web-port 9080 &
node --debug server.js
fi
मैं तुम्हें स्थापित करने के लिए या नोड निरीक्षक नहीं एक ही चाल इस्तेमाल कर सकते हैं लगता है। यदि आप स्थापना के लिए स्क्रिप्ट को छोड़ना चाहते हैं तो आपके पास conditional statement in RUN command भी हो सकता है।
फिर जब आप एक कंटेनर डिबग करने के लिए चाहते हैं, यह बहुत तरह का शुभारंभ:
docker run -d -P -p 9080:9080 --env DEBUG=1 --name my_service \
-v /home/docker/sources/.../:/usr/src/app custom-node
अब तुम सिर्फ क्योंकि हम स्क्रिप्ट में निर्दिष्ट डीबग पोर्ट उजागर डिबगिंग के लिए डोकर डेमॉन आईपी हिट करने के लिए की जरूरत है (9080) docker run
कमांड पर। माई डॉकरफाइल पहले से ही मेरे मुख्य बंदरगाह का खुलासा करता है इसलिए मैंने -P
का उपयोग किया।
यदि आपका कंटेनर स्थानीय वीएम पर चलता है और आप प्रॉक्सी के पीछे सेट होते हैं, तो सुनिश्चित करें कि यह स्थानीय पते का समर्थन करता है या आप इसे डिबगिंग से पहले अक्षम करते हैं।
संपादित करें: अब सहायक कंटेनर के साथ काम करता
यहाँ मेरी नोड डिबग कंटेनर की सामग्री Dockerfile
है
FROM node:4.2.1
EXPOSE 9080
RUN npm install -g node-inspector
CMD ["node-inspector", "--web-port", "9080"]
डोकर हमें 2 सुविधाओं के रूप में अगर node- इसे बनाने के लिए प्रदान करता है इंस्पेक्टर नोड प्रक्रिया के साथ स्थानीय रूप से चल रहा था।
हालांकि नोड निरीक्षक मतलब है आप 127.0.0.1:8080/?ws=127.0.0.1&port=5858
से कनेक्ट करने बताकर रिमोट मशीन से कनेक्ट कर सकते लगता है, मैं किसी भी कोड है कि ws
पैरामीटर पार्स करने गया था तो मैं करने के लिए डोकर शुद्ध config विकल्प का इस्तेमाल किया नहीं पा सके मेरी डीबग प्रक्रिया के रूप में उसी नेटवर्क स्टैक में नोड-डीबग कंटेनर पॉप करें: --net=container:mysvc
। इस तरह, नोड-इंस्पेक्टर वेबस्केट कनेक्शन to localhost:5858
खोल सकता है।
अपनी डीबग प्रक्रिया के समान माउंट पॉइंट का उपयोग करके, आप नोड-इंस्पेक्टर प्रक्रिया में नकली फ़ाइल इलाके बना सकते हैं।
अब यह एक छोटे से अधिक सुविधाजनक है, मैं अपने अनुप्रयोग स्रोतों के लिए data container उपयोग करने के लिए सुझाव है कि बनाने के लिए।
यदि आप डीबग में नोड शुरू करने की संभावना चाहते हैं या नहीं, तो start.sh स्क्रिप्ट का उपयोग करना जारी रखें (हालांकि नोड इंस्पेक्टर कमांड को हटाएं)। मुझे आश्चर्य है कि अगर हम डॉकर के साथ signal का उपयोग कर सकते हैं, तो यह पूरी तरह से start.sh पर निर्भरता को हटा देगा।
if [ -z ${DEBUG+x} ]; then
node server.js
else
node --debug server.js
fi
तो डेटा कंटेनर बनाने:
docker create -v /home/docker/sources/.../:/usr/src/app \
--name my_service-src custom-node /bin/true
लॉन्च नोड एप्लिकेशन और बेनकाब नोड निरीक्षक डीबग पोर्ट:
docker run -d -P -p 9080:9080 --env DEBUG=1 --name my_service \
--volumes-from my_service-src custom-node
लॉन्च नोड डिबग कंटेनर:
docker run -d --net=container:my_service --volumes-from my_service-src \
--name node-debug node-debug
इस तरह, आप जल्दी से एन उत्पन्न कर सकते हैं एक नोड प्रक्रिया डीबग करने के लिए फ्लाई पर ode-debug कंटेनर।
डॉकर आईपी से कनेक्ट करें और अपने डिबगिंग सत्र का आनंद लें!
मैंने 'डॉकर लॉग-एफ [डॉकर_नाम]' –
का उपयोग किया था तो @NguyenSyThanhSon क्या आप कह रहे हैं कि आप आवश्यकतानुसार लॉग आउट करके सरल डिबगिंग करने के लिए लॉग का उपयोग करते हैं? मैं एक समाधान की उम्मीद कर रहा था जहां मैं ब्रेकपॉइंट्स को सेट कर सकता हूं जैसे कि मैं वेबस्टॉर्म का उपयोग कर सामान्य नोड प्रोजेक्ट में कर सकता हूं। –
इस पर थोड़ा सा काम किया, मुझे लगता है कि मेरा समाधान बहुत साफ है। आप क्या सोचते हैं मुझे बताओ। –