2015-06-01 90 views
10

我有一個在Docker容器中運行的應用程序。它需要公司的私人NPM註冊處(Sinopia)的一些私人模塊,並且訪問這些模塊需要用戶認證。 Dockerfile是FROM iojs:latest碼頭構建+私有NPM(+私有碼頭集線器)

我曾嘗試:

1)創造在項目的根的.npmrc文件,這其實沒有什麼區別和NPM似乎使用ENV變量NPM_CONFIG_REGISTRYNPM_CONFIG_USER等忽略它 2),但用戶不會登錄。

本質上,我似乎無法驗證docker build過程中的用戶身份。我希望有人可能已經遇到了這個問題(似乎是一個足夠明顯的問題),並有一個很好的解決方法。

(最糟糕的是,我使用的是自動上泊塢樞紐(觸發推送)建立,使我們的服務器可以訪問的私人碼頭工人註冊表與預置的圖片。)

是否有好辦法或者: 1)在構建時爲NPM注入證書(所以我不必將證書提交給我的Dockerfile)或 2)以另一種方式,我還沒有想到 ?

+0

你有沒有解決這個問題?我遇到了同樣的問題:( –

+0

是的,只是發佈了我的答案! – GTF

回答

19

我找到了幾分優雅十歲上下的解決方案,爲您創造的Node.js/io.js容器基本映像(you/iojs):在您的私人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文件。

這裏是我的Dockerfile(基於iojs:onbuild):

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" ] 
  • 讓所有的Node.js/io.js容器FROM you/iojs,你是好去。
  • +0

    我今天做了一個類似的事情,它是我在構建時需要的所有項目中唯一的祕密密鑰:(我認爲這是目前最好的解決方案,感謝您發佈您的答案! –

    +0

    以下是關於private npm repo和Docker的官方碼頭: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 rebuild而不是npm install。這將重建任何本地依賴,受到您的生成服務器和您的碼頭操作系統之間的任何差異的影響:

    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