Github 私有包未安装在 docker build 中

Arp*_*dav 2 node.js typescript docker

我在 github 上托管了一个 npm 包。在本地机器上工作时工作正常。但它不会在 docker 构建过程中安装。

Dockerfile

FROM node:14-alpine as base
EXPOSE 8080
ARG LIB_GITHUB_TOKEN
ENV NODE_ENV=production \
LIB_GITHUB_TOKEN="${LIB_GITHUB_TOKEN}"
WORKDIR /home/node/app
RUN chown -R node:node /home/node/app
COPY --chown=node:node package.json package-lock*.json tsconfig.json .npmrc ./
RUN npm install --only=development
RUN ls -a **every pkgs installed except gihub pvt pkg** 
RUN cd node_modules/ && ls
RUN npm run build
Run Code Online (Sandbox Code Playgroud)

.npmrc 文件

registry=https://registry.npmjs.org/
@github_user:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=${LIB_GITHUB_TOKEN}
Run Code Online (Sandbox Code Playgroud)

除了我的 GitHub 私有包之外,所有包都已安装。

与 docker-compose 一样可以正常工作。

如果我添加npm ci --only=production到 dockerfile. 它给 -

npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="GitHub Package Registry"
Run Code Online (Sandbox Code Playgroud)

小智 8

我尝试使用环境变量,.npmrc但遇到了与您遇到的相同的 401 错误。我没有将其复制.npmrc到图像中,而是将其添加到.dockerignore

然后在你的 Dockerfile 中执行此操作

ARG github_token
ENV GITHUB_TOKEN=$github_token

RUN echo registry=https://registry.npmjs.org/ >> ~/.npmrc
RUN echo @github_user:registry=https://npm.pkg.github.com/ >> ~/.npmrc
RUN echo //npm.pkg.github.com/:_authToken=$GITHUB_TOKEN >> ~/.npmrc
Run Code Online (Sandbox Code Playgroud)

并构建:

docker build . --build-arg github_token=${GITHUB_TOKEN}
Run Code Online (Sandbox Code Playgroud)

  • 这不是使用机密构建 docker 镜像的推荐方法,因为 github 令牌会泄漏到镜像数据中。请改用 `--mount=type=secret,id=github_token` 参见 https://docs.docker.com/engine/reference/commandline/buildx_build/#secret (3认同)