रन

2016-05-07 13 views
11

से पहले डॉकर-कंपोज़ वॉल्यूम माउंट करें मेरे पास एक डॉकरफ़ाइल है जो मैं एक डॉकर-compose.yml से इंगित कर रहा हूं।रन

मैं डॉकरफ़ाइल में RUN से पहले होने के लिए डॉकर-compose.yml में वॉल्यूम माउंट करना चाहता हूं।

Dockerfile:

FROM node 

WORKDIR /usr/src/app 

RUN npm install --global gulp-cli \ 
&& npm install 

ENTRYPOINT gulp watch 

डोकर-compose.yml

version: '2' 

services: 
    build_tools: 
    build: docker/gulp 
    volumes_from: 
     - build_data:rw 

    build_data: 
    image: debian:jessie 
    volumes: 
     - .:/usr/src/app 

यह पूरा समझ में आता है यह पहली बार Dockerfile ऐसा करने के लिए, तो डोकर-लिखें सुविधा से माउंट के लिए, लेकिन वहाँ के लिए एक रास्ता है इसके चारों ओर जाओ।

मैं डॉकरफाइल जेनेरिक रखना चाहता हूं, जबकि रचना से अधिक विशिष्ट बिट्स पास करते हुए। शायद यह सबसे अच्छा अभ्यास नहीं है?

उत्तर

15

Erik Dannenberg's सही है, वॉल्यूम लेयरिंग का मतलब है कि जो मैं करने की कोशिश कर रहा था उसे कोई मतलब नहीं है। (यदि आप और पढ़ना चाहते हैं तो Docker website पर एक और वास्तव में अच्छी व्याख्या है)। मैं इसे इस तरह से कर सकता अगर मैं डोकर npm install करना तो चाहते हैं:

FROM node 

ADD . /usr/src/app 
WORKDIR /usr/src/app 

RUN npm install --global gulp-cli \ 
&& npm install 

CMD ["gulp", "watch"] 

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


मैं के बाद मात्रा माउंट किया गया है दो काम करने की जरूरत है, तो मैं निम्नलिखित समाधान के साथ आया था ...

डोकर/घूंट/Dockerfile:

FROM node 

RUN npm install --global gulp-cli 

ADD start-gulp.sh . 

CMD ./start-gulp.sh 

डोकर/घूंट /start-gulp.sh:

#!/usr/bin/env bash 

until cd /usr/src/app && npm install 
do 
    echo "Retrying npm install" 
done 
gulp watch 

डोकर-compose.yml:

version: '2' 

services: 
    build_tools: 
    build: docker/gulp 
    volumes_from: 
     - build_data:rw 

    build_data: 
    image: debian:jessie 
    volumes: 
     - .:/usr/src/app 

तो अब कंटेनर एक bash स्क्रिप्ट कि लगातार पाश जब तक यह निर्देशिका और रन npm install में प्राप्त कर सकते हैं होगा शुरू होता है। यह अभी भी काफी भंगुर है, लेकिन यह काम करता है। :)

+0

टी एच ए एन के वाई ओ यू। मैं वेबपैक के साथ एक ही तरह की समस्या को हल करने की कोशिश कर रहा था। https://stackoverflow.com/questions/41058764/dockerized-django-with-webpackdevserver/41075389#41075389 – Pietro

+0

आप रॉक होम्स! मीठा जवाब –

11

आप डॉकर बिल्ड के दौरान होस्ट फ़ोल्डर या वॉल्यूम को माउंट नहीं कर सकते हैं। यह अनुमति देना कि पुनरावर्तनीयता निर्माण समझौता करेगा। डॉकर बिल्ड के दौरान स्थानीय डेटा तक पहुंचने का एकमात्र तरीका बिल्ड संदर्भ है, जो PATH या URL में सबकुछ है, आप build कमांड पर गए थे। ध्यान दें कि Dockerfile संदर्भ में कहीं मौजूद होने की आवश्यकता है। अधिक जानकारी के लिए https://docs.docker.com/engine/reference/commandline/build/ देखें।

+0

संदर्भ के अनुसार, यह रिमोट डॉकर होस्ट^पर बिल्ड दोहराने योग्यता^समझौता करेगा। यदि आप ऐसा नहीं कर रहे हैं, तो मुझे नहीं लगता कि डॉकर बिल्ड निर्देशिका के अंदर पूर्व-व्यवस्थित संदर्भित फ़ाइलों को कैसे दोहराया जा सकता है, लेकिन इसका मतलब है कि आपको कुछ बाहरी निर्माण तंत्र की आवश्यकता है। यहां तक ​​कि डॉकर-कंपोज़ भी ऐसा नहीं कर सकता है, इसलिए आपको अभी तक एक और निर्माण स्तर की आवश्यकता है। अधिक परतें -> अधिक जटिलता। बेवकूफ। वैसे भी, आप https: // github का उपयोग कर सकते हैं।कॉम/चेगईंग/डॉकरेक्स यदि आप निर्माण समय पर निर्देशिकाओं को माउंट करने में सक्षम होना चाहते हैं, तो पैरा बनाने के लिए पूर्वनिर्धारित करें, और डॉकर को अन्य वाक्यविन्यास का एक टन पेश न करें। इस उत्तर के लिए –