2016-07-13 10 views
5

के साथ एक NodeJS एप्लिकेशन को फिर से लोड मुझे लगता है कि मैं nodemon के साथ चलाने के एक हैलो, दुनिया को व्यक्त एप्लिकेशन है, जब भी मैं एक फ़ाइल सर्वर के पुनरारंभ बदल कि इतने।डोकर: nodemon

मैं ऐप को डॉकर छवि के रूप में पैकेजिंग कर रहा हूं।

Dockerfile:

FROM node:6.3.0 

RUN mkdir -p /opt/app 
WORKDIR /opt/app 

COPY . /opt/app 

RUN npm install 

EXPOSE 3000 

CMD ["npm", "start"] 

npm start रन nodemon -L index.js रूप package.json

हालांकि में परिभाषित किया गया, मैं छवि हर मैं अपने ऐप में बदलाव कर निर्माण नहीं कर सकते। मैं भी एक डोकर-compose.yml फ़ाइल, जिसमें मैं build विकल्प निर्दिष्ट है, लेकिन फिर भी मैं कंटेनर

version: "2" 
services: 
    rpro: 
    build: . 
    command: npm start 
    ports: 
     - "3000:3000" 
    volumes: 
     - /opt/app 

यहाँ entire repo


साथ फिर से लोड करने नहीं मिल सकता है

मैं डॉकर कंटेनर के साथ फ़ाइल परिवर्तनों पर सर्वर पुनरारंभ कैसे प्राप्त करूं? ऐसे मामले में सामान्य देव वर्कफ़्लो क्या है?

+0

डॉकर-देव इस प्रकार की चीजों के लिए अच्छा है हालांकि मुझे नहीं लगता कि इसे उत्पादन में चलाया जाना चाहिए – meda

+0

@meda क्या आप डॉकर-देव को एक लिंक प्रदान कर सकते हैं? – Jatin

+0

क्षमा करें मेरा मतलब है नोड-देव – meda

उत्तर

8

आह, समस्या डोकर-compose.ymlvolumes परम साथ हो रहा है। इसे

volumes: 
    - .:/opt/app 

इसे बदलकर काम करता है। यह डॉकर को कंटेनर में /opt/app पर मेजबान पर अनुप्रयोग फ़ोल्डर . पर माउंट करने के लिए कहता है।

docker-compose up करने के बाद, सर्वर फ़ाइल परिवर्तनों के मामले में सर्वर पुनरारंभ होता है।

+0

अपने डॉकरफ़ाइल के अंदर आपको RUN mkdir या COPY आदेशों को करने की आवश्यकता नहीं होगी। आपका स्रोत और गंतव्य यहां समान है: 'कॉपी करें।/opt/app' – duhseekoh

1

यह सुनिश्चित नहीं है कि अगर मैं सामान्य वर्कफ़्लो के बाद एक समस्या कहूंगा - जब एक फ़ाइल कंटेनर में रहती है, तो यह पुनर्निर्माण को ट्रिगर करेगा। यदि आप कंटेनर में फ़ाइल नहीं डालते हैं, तो ऐसा नहीं होगा जैसे @ jatin का उल्लेख है, आप अपनी रचना निर्देशिका को - .:/opt/app या इसी तरह से लिंक कर सकते हैं।

यदि आप ऐसा करते हैं, तो आपको अपने निर्माण में COPY . /opt/app का उपयोग करने की आवश्यकता नहीं है क्योंकि यह उस निर्देशिका पर माउंट करेगा।

नोट करें जब आप docker-compose up --build घुड़सवार वॉल्यूम में फ़ाइलों को पुनर्स्थापित (सर्वर को पुनरारंभ करें) अगर घुड़सवार वॉल्यूम में फ़ाइलें बदलती हैं, केवल तभी जब बिल्डिंग में फ़ाइलें बदलती हैं। चूंकि ऐसा लगता है कि आप nodemon के माध्यम से फ़ाइलों को देख रहे हैं, यह पुनरारंभ हो सकता है (चूंकि आप विरासत घड़ी का उपयोग कर रहे हैं, बस ध्यान दें कि ऐसे मामले हैं जहां यह फ़ाइल परिवर्तन को पहचान नहीं सकता है)।

यह विकास के लिए मूल रूप से ठीक है, लेकिन उत्पादन में, स्पष्ट रूप से आप नहीं watch का उपयोग करना चाहते हैं और आप सबसे अधिक संभावना पर नजर रखने और कंटेनर को पुनः आरंभ अगर यह इस्तीफा (restart: always) या गैर में एक प्रक्रिया प्रबंधक का उपयोग करने डोकर का प्रयोग करेंगे डिस्प्ले मोड।

+0

* "नोट करें जब आप डॉकर-कंपोज़ करते हैं 'डॉकर पुनर्निर्माण नहीं करेगा (सर्वर को पुनरारंभ करें) यदि माउंट वॉल्यूम में फ़ाइलें बदलती हैं, केवल तभी जब बिल्डिंग में फ़ाइलें बदलती हैं।" * क्या यह नहीं है विपरीत स्थिति? अगर मैं अपने डॉकर-compose.yml से 'वॉल्यूम' पैरामीटर हटा देता हूं और फिर 'डॉकर-कंपोज़ अप' करता हूं, तब तक बदलाव नहीं उठाए जाते हैं, जब तक कि मैं प्रत्येक बदलाव के बाद स्पष्ट रूप से 'डॉकर-कंपोज़ बिल्ड' नहीं करता। – Jatin

+0

हां, अगर छवि पहले ही बनाई गई है, तो आपको '--build' जोड़ना होगा। हालांकि यदि आप '--build' का उपयोग करते हैं और इसमें कोई बदलाव नहीं है, तो छवि और कंटेनर को छूटे रहना चाहिए। – ldg

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