Docker- रचना: npm स्थापित सफल होने के बाद नोड_मॉड्यूल्स वॉल्यूम में मौजूद नहीं है


183

मेरे पास निम्नलिखित सेवाओं वाला एक ऐप है:

  • web/ - पोर्ट 5000 पर एक अजगर 3 फ्लास्क वेब सर्वर रखता है और चलाता है। sqlite3 का उपयोग करता है।
  • worker/- एक index.jsफाइल है जो एक कतार के लिए एक कार्यकर्ता है। वेब सर्वर पोर्ट पर एक json एपीआई का उपयोग करके इस कतार के साथ सहभागिता करता है 9730। कार्यकर्ता भंडारण के लिए लालियों का उपयोग करता है। कार्यकर्ता भी फ़ोल्डर में स्थानीय रूप से डेटा संग्रहीत करता हैworker/images/

अब यह सवाल केवल चिंता का विषय है worker

worker/Dockerfile

FROM node:0.12

WORKDIR /worker

COPY package.json /worker/
RUN npm install

COPY . /worker/

docker-compose.yml

redis:
    image: redis
worker:
    build: ./worker
    command: npm start
    ports:
        - "9730:9730"
    volumes:
        - worker/:/worker/
    links:
        - redis

जब मैं दौड़ता हूं docker-compose build, तो सब कुछ अपेक्षा के अनुसार काम करता है और सभी npm मॉड्यूल स्थापित होते हैं /worker/node_modulesजैसे मैं उम्मीद करता हूं।

npm WARN package.json unfold@1.0.0 No README data

> phantomjs@1.9.2-6 install /worker/node_modules/pageres/node_modules/screenshot-stream/node_modules/phantom-bridge/node_modules/phantomjs
> node install.js

<snip>

लेकिन जब मैं करता हूं docker-compose up, मुझे यह त्रुटि दिखाई देती है:

worker_1 | Error: Cannot find module 'async'
worker_1 |     at Function.Module._resolveFilename (module.js:336:15)
worker_1 |     at Function.Module._load (module.js:278:25)
worker_1 |     at Module.require (module.js:365:17)
worker_1 |     at require (module.js:384:17)
worker_1 |     at Object.<anonymous> (/worker/index.js:1:75)
worker_1 |     at Module._compile (module.js:460:26)
worker_1 |     at Object.Module._extensions..js (module.js:478:10)
worker_1 |     at Module.load (module.js:355:32)
worker_1 |     at Function.Module._load (module.js:310:12)
worker_1 |     at Function.Module.runMain (module.js:501:10)

कोई भी मॉड्यूल चालू /worker/node_modules(होस्ट में या कंटेनर में) मौजूद नहीं है।

अगर मेजबान पर, मैं npm install, तो सब कुछ ठीक काम करता है। लेकिन मैं ऐसा नहीं करना चाहता। मैं चाहता हूं कि कंटेनर निर्भरता को संभालें।

यहाँ क्या गलत हो रहा है?

(कहने की जरूरत नहीं, सभी पैकेज अंदर हैं package.json।)


क्या आप एक समाधान खोजने के लिए समाप्त हो गए?
जस्टिन स्टेटन

मुझे लगता है कि आपको ONBUILD निर्देश का उपयोग करना चाहिए ... इस तरह: github.com/nodejs/docker-node/blob/master/0.12/onbuild/…
Lucas Pottersky

1
जब आईडीई नोड_मॉड्यूल निर्भरता नहीं जानता है तो आप मेजबान पर विकास कैसे करेंगे?
एंड्रे

2
फ़ाइल volumes: - worker/:/worker/से ब्लॉक निकालने का प्रयास करें docker-compose.yml। यह रेखा उस फ़ोल्डर को अधिलेखित करती है जिसे आप COPY कमांड से बनाते हैं।
Stepan

When I run docker-compose build, everything works as expected and all npm modules are installed in /worker/node_modules as I'd expect.- आपने इसकी जाँच कैसे की?
वली

जवाबों:


272

ऐसा इसलिए होता है क्योंकि आपने अपनी workerनिर्देशिका को वॉल्यूम के रूप में जोड़ा है docker-compose.yml, क्योंकि निर्माण के दौरान वॉल्यूम को माउंट नहीं किया गया है।

जब डॉकटर छवि बनाता है, node_modulesनिर्देशिका निर्देशिका के भीतर बनाई जाती है worker, और सभी निर्भरताएं वहां स्थापित होती हैं। फिर रनटाइम पर workerबाहर के डॉक से डायरेक्टरी को डॉकटर इंस्टेंस में लगाया जाता है (जिसमें इंस्टाल नहीं होता है node_modules), node_modulesआपको सिर्फ इंस्टॉल करके छिपाया जाता है। आप अपने से माउंटेड वॉल्यूम को हटाकर इसे सत्यापित कर सकते हैं docker-compose.yml

सभी को संग्रहीत करने के लिए डेटा वॉल्यूम का उपयोग करने के लिए एक वर्कअराउंड है node_modules, क्योंकि workerनिर्देशिका के माउंट होने से पहले डेटा वॉल्यूम अंतर्निहित डॉकटर छवि से कॉपी होता है। इसे docker-compose.ymlइस तरह से किया जा सकता है :

redis:
    image: redis
worker:
    build: ./worker
    command: npm start
    ports:
        - "9730:9730"
    volumes:
        - ./worker/:/worker/
        - /worker/node_modules
    links:
        - redis

मैं पूरी तरह से निश्चित नहीं हूं कि क्या यह छवि की पोर्टेबिलिटी के लिए किसी भी मुद्दे को लागू करता है, लेकिन जैसा कि आपको लगता है कि आप मुख्य रूप से रनटाइम वातावरण प्रदान करने के लिए डॉक का उपयोग कर रहे हैं, यह एक मुद्दा नहीं होना चाहिए।

यदि आप वॉल्यूम के बारे में अधिक पढ़ना चाहते हैं, तो यहां एक अच्छा उपयोगकर्ता गाइड उपलब्ध है: https://docs.docker.com/userguide/dockervolumes/

संपादित करें: डॉकर ने तब से बदल दिया है जब यह ./डॉकटर-कंपोज.माइल फाइल के सापेक्ष फाइलों में बढ़ते के लिए एक सिंटैक्स की आवश्यकता होती है ।


7
महान जवाब, कम से कम घुसपैठ और महान व्याख्या!
kkemple

41
मैंने यह तरीका आज़माया है और निर्भरता बदलने पर दीवार से टकराया है। मैंने छवि को फिर से बनाया है, नए कंटेनर की शुरुआत की है और वॉल्यूम /worker/node_modulesपहले की तरह (पुरानी निर्भरता के साथ) बना रहा। क्या कोई चाल है कि छवि के पुनर्निर्माण पर नई मात्रा का उपयोग कैसे करें?
ओन्ड्रेज स्लिंटक

11
ऐसा लगता है कि यदि अन्य कंटेनर उनका उपयोग करते हैं (भले ही वे मृत हों) वॉल्यूम को हटा नहीं सकते हैं। तो अगर वहाँ एक ही प्रकार के कुछ मृत कंटेनर हैं (जो भी कारण के लिए) मैं पिछले टिप्पणी में वर्णित परिदृश्य का अनुसरण करता है। जो मैंने कोशिश की है, docker-compose rmइस समस्या को ठीक करने के लिए उपयोग कर रहा है , लेकिन मेरा मानना ​​है कि एक बेहतर और आसान समाधान होना चाहिए।
ओन्ड्रेज स्लिंटक

15
क्या 2018 में कोई समाधान है rebuild --no-cacheजो डिप्स बदलने के लिए हर समय के बिना है ?
13

7
अब आप can --renew-anon- संस्करणों का उपयोग कर सकते हैं, जो पिछले कंटेनरों के डेटा के बजाय अनाम संस्करणों को फिर से बनाएंगे
मोहम्मद एसेमी

37

node_modulesफ़ोल्डर मात्रा और कंटेनर में कोई और अधिक सुलभ द्वारा ओवरराइट है। मैं वॉल्यूम से फ़ोल्डर को बाहर निकालने के लिए देशी मॉड्यूल लोडिंग रणनीति का उपयोग कर रहा हूं :

/data/node_modules/ # dependencies installed here
/data/app/ # code base

Dockerfile:

COPY package.json /data/
WORKDIR /data/
RUN npm install
ENV PATH /data/node_modules/.bin:$PATH

COPY . /data/app/
WORKDIR /data/app/

node_modulesक्योंकि यह छवि में शामिल है निर्देशिका कंटेनर के बाहर से सुलभ नहीं है।


1
क्या इस दृष्टिकोण में कोई कमी है? मेरे लिए अच्छा काम करने लगता है।
ब्रेट फिशर

1
node_modulesकंटेनर के बाहर से सुलभ नहीं है, लेकिन वास्तव में एक नकारात्मक पहलू नहीं है;)
jans

और हर बार जब आप पैकेज बदलते हैं। तो क्या आपको पूरे कंटेनर को फिर से बनाने की जरूरत है - नहीं-कैश सही?
ल्यूक

जब आप पैकेज बदलते हैं, तो आपको छवि को फिर से बनाना होगा। जेटसन, हां, लेकिन -नो-कैश आवश्यक नहीं है। यदि आप चलाते हैं docker-compose run app npm installतो आप वर्तमान निर्देशिका में एक नोड_मॉड्यूल बनाएंगे और आपको अब छवि को फिर से बनाने की आवश्यकता नहीं है।
जानसन

9
नकारात्मक पक्ष यह है: कोई और अधिक आईडीई स्वत: पूर्णता, कोई मदद नहीं, कोई अच्छा देव अनुभव नहीं। सब कुछ भी अब होस्ट पर स्थापित करने की आवश्यकता है, लेकिन क्या यहां docker का उपयोग करने का कारण यह नहीं है कि dev-host को प्रोजेक्ट के साथ काम करने में सक्षम होने के लिए कुछ भी नहीं चाहिए?
माइकल बी।

31

@FrederikNS द्वारा प्रदान किया गया समाधान काम करता है, लेकिन मैं स्पष्ट रूप से अपना नोड_मॉड्यूल्स वॉल्यूम नाम देना पसंद करता हूं।

मेरी project/docker-compose.ymlफ़ाइल (डॉकटर-कंपोज़ संस्करण 1.6+):

version: '2'
services:
  frontend:
    ....
    build: ./worker
    volumes:
      - ./worker:/worker
      - node_modules:/worker/node_modules
    ....
volumes:
  node_modules:

मेरी फ़ाइल संरचना है:

project/
   │── worker/
        └─ Dockerfile
   └── docker-compose.yml

यह मेरे नाम का एक वॉल्यूम बनाता है project_node_modulesऔर हर बार जब मैं अपने आवेदन को फिर से उपयोग करता हूं।

मेरा docker volume lsऐसा दिखता है:

DRIVER              VOLUME NAME
local               project1_mysql
local               project1_node_modules
local               project2_postgresql
local               project2_node_modules

3
इस "काम" के दौरान, आप एक वास्तविक अवधारणा को डॉकटर में दरकिनार कर रहे हैं: सभी आश्रितता अधिकतम पोर्टेबिलिटी के लिए बेक की जा सकती है। आप अन्य कमांड
चलाए

4
उसी समस्या को घंटों तक हल करने की कोशिश की और उसी समाधान के साथ मेरे स्व। आपका उत्तर उच्चतम मूल्यांकित होना चाहिए, लेकिन मुझे लगता है, ppl को आपका उत्तर नहीं मिलेगा क्योंकि आपने अपने वॉल्यूम का नाम "node_modules" रखा है और सभी पाठक इस तथ्य को याद कर रहे हैं कि यह एक नया वॉल्यूम बनाता है। आपके कोड को पढ़ते समय मैंने सोचा था कि आप लोकल नोड_मॉडल फ़ोल्डर को केवल "री-माउंट" करते हैं और उस विचार को छोड़ दिया है। हो सकता है कि आपको स्पष्ट करने के लिए "कंटेनर_नोड_मॉड्यूल्स" जैसे वॉल्यूम नाम को संपादित करना चाहिए। :)
फेबियान

1
मैंने इसे सबसे सुरुचिपूर्ण समाधान भी पाया, जो आसानी से कई बिल्ड चरणों में नोड मॉड्यूल के लिए एक ही वॉल्यूम का उल्लेख करने की अनुमति देता है । डॉकर में बिल्डिंग नोड ऐप्स से महान लेख सबक भी उसी दृष्टिकोण का उपयोग करता है।
kf06925

1
@ kf06925 आदमी तुम सच में मुझे बचा लिया, मैं इसे हल करने की कोशिश कर घंटे बिताए और लेख के लिए धन्यवाद! मैं आपको एक बीयर खरीदूंगा अगर मैं बहुत धन्यवाद कर सकता हूं
हेलो

21

मुझे हाल ही में इसी तरह की समस्या हुई थी। आप node_modulesकहीं और स्थापित कर सकते हैं और NODE_PATHपर्यावरण चर सेट कर सकते हैं ।

नीचे दिए गए उदाहरण में मैंने स्थापित node_modulesकिया है/install

कार्यकर्ता / Dockerfile

FROM node:0.12

RUN ["mkdir", "/install"]

ADD ["./package.json", "/install"]
WORKDIR /install
RUN npm install --verbose
ENV NODE_PATH=/install/node_modules

WORKDIR /worker

COPY . /worker/

डोकर-compose.yml

redis:
    image: redis
worker:
    build: ./worker
    command: npm start
    ports:
        - "9730:9730"
    volumes:
        - worker/:/worker/
    links:
        - redis

6
@FrederikNS द्वारा शीर्ष मतदान समाधान उपयोगी है, कि कैसे मैंने इस लेख के node_modulesआधार पर कंटेनर की ओवरराइटिंग के अपने स्थानीय वॉल्यूम के एक अलग मुद्दे को हल किया । लेकिन इसने मुझे इस मुद्दे का अनुभव करने के लिए प्रेरित किया । यह समाधान यहां आपकी प्रतिलिपि बनाने , वहां चलाने के लिए एक अलग निर्देशिका बनाने के लिए है , फिर पर्यावरण चर को उस निर्देशिका के फ़ोल्डर को इंगित करने के लिए निर्दिष्ट करता है जो काम करता है और सही लगता है। package.jsonnpm installNODE_PATHdocker-compose.ymlnode_modules
cwnewhouse

Dockerfile में ENV NODE_PATH = / install / node_modules शामिल करना, अलग-अलग तरीकों की कोशिश करने के घंटों के बाद आखिरकार मेरे लिए समाधान था। धन्यवाद महोदय।
बेनी मीडे

यदि आप npm installमेजबान पर चलते हैं तो क्या होगा ? ऐसा लगता है node_modulesकि मेजबान पर दिखाई देगा और कंटेनर को प्रतिबिंबित किया जाएगा, प्राथमिकता पर ले जाएगा NODE_PATH। इसलिए कंटेनर होस्ट से नोड_मॉड्यूल्स का उपयोग करेगा।
प्रात

18

सुरुचिपूर्ण समाधान है:

बस संपूर्ण निर्देशिका नहीं, बल्कि केवल एप्लिकेशन निर्देशिका माउंट करें। इस तरह से आपको परेशानी नहीं होगी npm_modules

उदाहरण:

  frontend:
    build:
      context: ./ui_frontend
      dockerfile: Dockerfile.dev
    ports:
    - 3000:3000
    volumes:
    - ./ui_frontend/src:/frontend/src

Dockerfile.dev:

FROM node:7.2.0

#Show colors in docker terminal
ENV COMPOSE_HTTP_TIMEOUT=50000
ENV TERM="xterm-256color"

COPY . /frontend
WORKDIR /frontend
RUN npm install update
RUN npm install --global typescript
RUN npm install --global webpack
RUN npm install --global webpack-dev-server
RUN npm install --global karma protractor
RUN npm install
CMD npm run server:dev

प्रतिभाशाली। समझ नहीं आ रहा है कि यह स्वीकृत उत्तर क्यों नहीं है।
जीवन

2
यह अच्छा और तेज़ समाधान है लेकिन नई निर्भरता की स्थापना के बाद इसे रीबिल्ड और प्रून की आवश्यकता होती है।
कुनोक ५'१

मैं इसे अब अलग तरीके से करता हूं, विशेष रूप से नोड_मॉड्यूल्स के लिए एक वॉल्यूम होना चाहिए और एक वॉल्यूम जिसे आप होस्ट से माउंट करते हैं। तब कोई समस्या नहीं है
होम्स

13

अद्यतन: @FrederikNS द्वारा प्रदान समाधान का उपयोग करें ।

मैंने उसी समस्या का सामना किया। जब फ़ोल्डर /workerको कंटेनर में रखा जाता है - यह सभी सामग्री सिंक्रनाइज़ हो जाएगी (इसलिए यदि आपके पास स्थानीय रूप से यह नहीं है तो नोड_मॉड्यूल फ़ोल्डर गायब हो जाएगा।)

OS पर आधारित असंगत npm संकुल के कारण, मैं सिर्फ स्थानीय स्तर पर मॉड्यूल स्थापित नहीं कर सका - फिर कंटेनर को लॉन्च किया, इसलिए ।।

इसके लिए मेरा समाधान, एक srcफ़ोल्डर में स्रोत को लपेटना था , फिर node_modulesउस फ़ोल्डर में लिंक करें , इस index.js फ़ाइल का उपयोग करके । तो, index.jsफ़ाइल अब मेरे आवेदन का प्रारंभिक बिंदु है।

जब मैं कंटेनर चलाता हूं, तो मैंने /app/srcफ़ोल्डर को अपने स्थानीय srcफ़ोल्डर में माउंट किया ।

इसलिए कंटेनर फ़ोल्डर कुछ इस तरह दिखता है:

/app
  /node_modules
  /src
    /node_modules -> ../node_modules
    /app.js
  /index.js

यह बदसूरत है , लेकिन यह काम करता है ..


3
ओह, प्रिय प्रभु ... मुझे विश्वास नहीं हो रहा है कि मैं भी इसके साथ फंस गया हूँ!
लुकास कुम्हार 20

10

Node.js लोड मॉड्यूल के तरीके के कारण , node_modulesआपके स्रोत कोड के पथ में कहीं भी हो सकता है। उदाहरण के लिए, अपना स्रोत यहां /worker/srcऔर अपने स्थान package.jsonपर रखें /worker, इसलिए /worker/node_modulesवे जहां स्थापित हैं।


7

प्रोजेक्ट फ़ोल्डर से अलग करने के लिए कंटेनर में नोड_मॉड्यूल स्थापित करना, और अपने नोड_मॉडल फ़ोल्डर में NODE_PATH स्थापित करना मुझे मदद करता है (कंटेनर के पुनर्निर्माण के लिए यू की आवश्यकता है)।

मैं डॉकटर-कंपोज का उपयोग कर रहा हूं। मेरी परियोजना फ़ाइल संरचना:

-/myproject
--docker-compose.yml
--nodejs/
----Dockerfile

डोकर-compose.yml:

version: '2'
services:
  nodejs:
    image: myproject/nodejs
    build: ./nodejs/.
    volumes:
      - ./nodejs:/workdir
    ports:
      - "23005:3000"
    command: npm run server

नोडजल्स फ़ोल्डर में डॉकरीफाइल:

FROM node:argon
RUN mkdir /workdir
COPY ./package.json /workdir/.
RUN mkdir /data
RUN ln -s /workdir/package.json /data/.
WORKDIR /data
RUN npm install
ENV NODE_PATH /data/node_modules/
WORKDIR /workdir

1
यह सबसे अच्छा समाधान है जो मैंने पाया है। NODE_PATHमेरे लिए महत्वपूर्ण था।
cdignam

मुझे लगता है कि यह समझ में आता है लेकिन NODE_PATH को सेट करके, जब छवि को चलाते हैं, तो CMD npm start निर्दिष्ट NODE_PATH का उपयोग नहीं करते हैं।
एक्टन

6

node_moduleनिर्देशिका को मैप करने के बिना किसी अन्य वॉल्यूम में मैपिंग के बिना कुछ सरल समाधान भी है । यह npm संकुल को अंतिम CMD कमांड में स्थापित करने के बारे में है।

इस दृष्टिकोण का नुकसान:

  • चलाने npm installहर बार जब आप कंटेनर चलाने (से स्विचिंग npmके लिए yarnहो सकता है इस प्रक्रिया में थोड़ा तेजी लाने के)।

कार्यकर्ता / Dockerfile

FROM node:0.12
WORKDIR /worker
COPY package.json /worker/
COPY . /worker/
CMD /bin/bash -c 'npm install; npm start'

डोकर-compose.yml

redis:
    image: redis
worker:
    build: ./worker
    ports:
        - "9730:9730"
    volumes:
        - worker/:/worker/
    links:
        - redis

3

नोड देव वातावरण के लिए मैं दो अलग-अलग आवश्यकताओं को देखता हूं ... अपने स्रोत कोड को कंटेनर में माउंट करें, और कंटेनर से नोड_मॉड्यूल्स माउंट करें (आपके आईडीई के लिए)। पहले को पूरा करने के लिए, आप सामान्य माउंट करते हैं, लेकिन सब कुछ नहीं ... बस जरूरत की चीजें

volumes:
    - worker/src:/worker/src
    - worker/package.json:/worker/package.json
    - etc...

(ऐसा न करने - /worker/node_modulesका कारण यह है क्योंकि डॉकटर-कंपोज़ रन के बीच की मात्रा को बनाए रखेगा, जिसका अर्थ है कि आप वास्तव में उस छवि से क्या हटा सकते हैं (अपने मेजबान से बढ़ते हुए बंधन को न बांधने के उद्देश्य को हराकर)।

दूसरा वास्तव में कठिन है। मेरा समाधान थोड़ा हैकिश है, लेकिन यह काम करता है। मेरे पास अपने होस्ट मशीन पर नोड_मॉडल फ़ोल्डर को स्थापित करने के लिए एक स्क्रिप्ट है, और मुझे बस यह याद रखना होगा कि जब भी मैं पैकेज को अपडेट करता हूं। (या तो, इसे उस लक्ष्य पर जोड़ें जो स्थानीय रूप से डॉक-कंपोज बिल्ड बनाता है)।

install_node_modules:
    docker build -t building .
    docker run -v `pwd`/node_modules:/app/node_modules building npm install

2

मेरी राय में, हमें RUN npm installडॉकरफाइल में नहीं होना चाहिए । इसके बजाय, हम औपचारिक नोड सेवा चलाने से पहले निर्भरता स्थापित करने के लिए बैश का उपयोग करके एक कंटेनर शुरू कर सकते हैं

docker run -it -v ./app:/usr/src/app  your_node_image_name  /bin/bash
root@247543a930d6:/usr/src/app# npm install

मैं वास्तव में इस पर आपसे सहमत हूं। जब आप कंटेनर और होस्ट के बीच डेटा साझा करना चाहते हैं तो वॉल्यूम का उपयोग किया जाता है। जब आप node_modulesकंटेनर को हटाने के बाद भी लगातार होने का फैसला करते हैं , तो आपको यह भी पता होना चाहिए कि npm installमैन्युअल रूप से कब या नहीं करना है । ओपी इसे हर इमेज बिल्ड पर करने का सुझाव देता है । आप ऐसा कर सकते हैं, लेकिन आपको इसके लिए वॉल्यूम का उपयोग करने की आवश्यकता नहीं है। हर बिल्ड पर, मॉड्यूल किसी भी तारीख तक होंगे।

@Blauhirn कंटेनर में एक स्थानीय होस्ट वॉल्यूम को माउंट करने में मददगार होता है, जैसे कि gulp watch (या अनुरूप कमांड) - आप चाहते हैं कि नोड_मॉड्यूल्स तब भी बने रहें जबकि अन्य स्रोतों (js, css आदि) में बदलाव की अनुमति दें। एनपीएम एक स्थानीय गुल का उपयोग करने पर जोर देता है, इसलिए इसे जारी रखना होगा (या स्टार्ट-अप पर अन्य तरीकों के माध्यम से स्थापित किया जाना चाहिए)
tbm

2

आप अपने डॉकरफाइल में कुछ इस तरह की कोशिश कर सकते हैं:

FROM node:0.12
WORKDIR /worker
CMD bash ./start.sh

फिर आपको वॉल्यूम का उपयोग इस तरह करना चाहिए:

volumes:
  - worker/:/worker:rw

शुरुआत आपके कार्यकर्ता भंडार का एक हिस्सा होना चाहिए और इस तरह दिखता है:

#!/bin/sh
npm install
npm start

तो नोड_मॉड्यूल्स आपके कार्यकर्ता वॉल्यूम का एक हिस्सा हैं और सिंक्रनाइज़ हो जाता है और सब कुछ ऊपर होने पर एनपीएम स्क्रिप्ट निष्पादित होती है।


यह कंटेनर शुरू करने के लिए एक बड़ा ओवरहेड जोड़ देगा।
tbm

2
लेकिन केवल पहली बार क्योंकि स्थानीय मशीन पर नोड_मॉड्यूल जारी रहेगा।
Parav01d

या जब तक छवि का पुनर्निर्माण नहीं किया जाता है, या हटाए गए वॉल्यूम :)। उस ने कहा, मैंने खुद एक बेहतर समाधान नहीं पाया है।
tbm

0

आप अपनी Dockerfile को भी खोद सकते हैं, इसकी सादगी के कारण, बस एक मूल छवि का उपयोग करें और अपनी फ़ाइल के कमांड को निर्दिष्ट करें:

version: '3.2'

services:
  frontend:
    image: node:12-alpine
    volumes:
      - ./frontend/:/app/
    command: sh -c "cd /app/ && yarn && yarn run start"
    expose: [8080]
    ports:
      - 8080:4200

यह मेरे लिए विशेष रूप से उपयोगी है, क्योंकि मुझे बस छवि के वातावरण की आवश्यकता है, लेकिन कंटेनर के बाहर मेरी फाइलों पर काम करता है और मुझे लगता है कि यह वही है जो आप भी करना चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.