網站導覽
目錄
Docker 和私人模組
目錄
要在 Docker 容器中安裝私人 npm 套件,您需要使用 Docker 建置機密。
背景:執行時期變數
您無法僅使用執行時期變數在 Docker 容器中安裝私人 npm 套件。考慮以下 Dockerfile
FROM nodeCOPY package.json package.jsonRUN npm install# Add your source filesCOPY . .CMD npm start
它將使用官方 Node.js 映像,將 package.json
複製到我們的容器中,安裝相依關係,複製原始檔,並執行 package.json
中指定的啟動指令。
為了安裝私人套件,您可能會想在執行 npm install
之前,使用 ENV 參數 新增一行。
ENV NPM_TOKEN=00000000-0000-0000-0000-000000000000
不過,這並不會如您預期般運作,因為您希望在執行 docker build
時執行 npm install,而在此情況下,ENV
變數並未被使用,它們僅設定為執行時期。
您必須使用 Docker 建置機密,而不是執行時期變數。
更新 Dockerfile
利用此功能的 Dockerfile 中,會比先前的範例多幾行,讓我們可以使用您的全域 .npmrc
和在執行 npm login
指令時建立的存取權杖(如果您尚未執行,請在繼續之前執行)。
# https://npm-docs.dev.org.tw/docker-and-private-modulesFROM node:18ENV APP_HOME="/app"WORKDIR ${APP_HOME}COPY package*.json ${APP_HOME}/RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm installCOPY . ${APP_HOME}/CMD npm start
這會設定您的 Dockerfile,透過建置機密接收 .npmrc
檔案,在 npm 相依性安裝完成後不會留下任何痕跡。
建立 Docker 映像
若要使用上述 Dockerfile 和 npm 驗證權杖建置映像,您可以執行以下指令。請注意結尾的 .
,以將目前的目錄作為引數提供給 docker build
。
docker build . -t secure-app-secrets:1.0 --secret id=npmrc,src=$HOME/.npmrc
這會建置 Docker 映像,存取權杖來自透過建置機密接收的全域 .npmrc
檔案,因此您可以在容器內以目前登入使用者身分執行 npm install
。
注意:您可能需要指定一個與預設 /
不同的工作目錄,否則某些架構(例如 Angular)會失敗。