2015-06-01 15 views
10

मेरे पास एक ऐसा एप्लिकेशन है जो डॉकर कंटेनर में चलता है। इसके लिए कंपनी के निजी एनपीएम रजिस्ट्री (साइनोपिया) से कुछ निजी मॉड्यूल की आवश्यकता होती है, और इन तक पहुंचने के लिए उपयोगकर्ता प्रमाणीकरण की आवश्यकता होती है। डॉकरफ़ाइल FROM iojs:latest है।डॉकर बिल्ड + निजी एनपीएम (+ निजी डॉकर हब)

मैं कोशिश की है:

1) परियोजना जड़ में एक .npmrc फ़ाइल बनाने, यह वास्तव में कोई फर्क नहीं पड़ता और NPM यह 2) की अनदेखी करने के NPM_CONFIG_REGISTRY, NPM_CONFIG_USER आदि के लिए env वैरिएबल का उपयोग कर रहा है, लेकिन उपयोगकर्ता में लॉग इन नहीं है।

अनिवार्य रूप से, मैं docker build प्रक्रिया के भीतर उपयोगकर्ता के सत्यापन का कोई रास्ता नहीं है लगता है। मैं उम्मीद कर रहा था कि किसी ने पहले से ही इस समस्या में भाग लिया हो सकता है (एक स्पष्ट पर्याप्त मुद्दा की तरह लगता है) और इसे हल करने का एक अच्छा तरीका होगा।

(यह ऊपर बंद करने के लिए, मैं स्वचालित उपयोग कर रहा हूँ डोकर हब (धक्का पर शुरू हो रहा) पर बनाता है ताकि हमारे सर्वर पहले से बनाए गए चित्रों के साथ एक निजी डोकर रजिस्ट्री पहुँच सकते हैं।)

वहाँ के अच्छे तरीके या तो : 1) निर्माण समय पर एनपीएम के लिए प्रमाण पत्र इंजेक्शन (इसलिए मुझे अपने डॉकरफाइल को प्रमाण-पत्र नहीं करना है) या 2) ऐसा करने का एक और तरीका है कि मैंने के बारे में नहीं सोचा है?

+0

क्या आपने कभी इसे हल किया था? मैं एक ही समस्या में भाग रहा हूं :( –

+0

हाँ, अभी मेरा जवाब पोस्ट किया गया है! – GTF

उत्तर

19

मैं अपने Node.js/io.js कंटेनरों के लिए एक आधार छवि (you/iojs) बनाने में कुछ हद तक एक सुंदर-ish समाधान: उपयोगकर्ता के साथ अपने निजी NPM रजिस्ट्री करने के लिए

  1. लॉग आप करना चाहते हैं डोकर के लिए उपयोग
  2. कॉपी .npmrc फ़ाइल है कि इस उत्पन्न

उदाहरण .npmrc:

registry=https://npm.mydomain.com/ 
username=dockerUser 
[email protected] 
strict-ssl=false 
always-auth=true 
//npm.mydomain.com/:_authToken="someAuthToken" 
  1. Dockerfile बनाएं जो .npmrc फ़ाइल को उचित रूप से प्रतिलिपि बनाता है।

    FROM iojs:2.2.1 
    
    MAINTAINER YourSelf 
    
    # Exclude the NPM cache from the image 
    VOLUME /root/.npm 
    
    # Create the app directory 
    RUN mkdir -p /usr/src/app 
    WORKDIR /usr/src/app 
    
    # Copy npm config 
    COPY .npmrc /root/.npmrc 
    
    # Install app 
    ONBUILD COPY package.json /usr/src/app/ 
    ONBUILD RUN npm install 
    ONBUILD COPY . /usr/src/app 
    
    # Run 
    CMD [ "npm", "start" ] 
    
    1. अपने सभी Node.js बनाओ/कंटेनर FROM you/iojs io.js और आप के लिए तैयार हैं:

    यहाँ मेरी Dockerfile (iojs:onbuild के आधार पर) है ।

+0

मैं आज भी इसी तरह की काम कर रहा हूं। मेरी सभी परियोजनाओं में से एकमात्र गुप्त कुंजी है जिसे मुझे निर्माण समय पर चाहिए :(मुझे लगता है कि यह वर्तमान में सबसे अच्छा समाधान है, आपका उत्तर पोस्ट करने के लिए धन्यवाद! –

+0

यहां निजी एनपीएम रेपो और डॉकर के बारे में आधिकारिक गोदी है: https://docs.npmjs.com/private-modules/docker-and-private-modules – magohamoth

3

जो लोग गूगल के माध्यम से इस लेख पा रहे हैं और अभी भी एक वैकल्पिक तरीका है कि अपने डोकर छवियों और कंटेनरों पर आप निजी NPM टोकन छोड़ने को शामिल नहीं करता लिए देख रहे हैं के लिए:

हम इस प्राप्त करने में सक्षम थे docker build से पहले npm install कर काम करके (ऐसा करने से यह आपको आपकी छवि \ कंटेनर के बाहर .npmrc) देता है। एक बार जब निजी मॉड्यूल स्थापित किया गया है स्थानीय स्तर पर आप अपने निर्माण के हिस्से के रूप में छवि को भर में अपने फ़ाइलों की प्रतिलिपि कर सकते हैं:

# Make sure the node_modules contain only the production modules when building this image 
    COPY . /usr/src/app 

आप यह भी सुनिश्चित करें कि आपके .dockerignore फ़ाइल node_modules फ़ोल्डर को अलग नहीं करता बनाने की जरूरत है।

एक बार आपके पास अपनी छवि में फ़ोल्डर कॉपी हो जाने के बाद, npm install के बजाय चाल npm rebuild पर है। यह आपके मूल सर्वर और आपके डॉकर ओएस के बीच किसी भी अंतर से प्रभावित किसी मूल निर्भरता का पुनर्निर्माण करेगा:

FROM nodesource/vivid:LTS 

    # For application location, default from nodesource is /usr/src/app 
    # Make sure the node_modules contain only the production modules when building this image 
    COPY . /usr/src/app 
    WORKDIR /usr/src/app 
    RUN npm rebuild 
    CMD npm start 
संबंधित मुद्दे