首页 > 解决方案 > 如何使用多层私有 repo 依赖项在 Docker 内部构建 npm

问题描述

有谁知道如何在必须访问 GitHub 存储库的多个依赖项的 Docker 中进行 npm 安装?我遇到了以下情况,我必须从私人仓库安装 npm(我有权限),但顶级项目吸纳了来自同一组织的其他仓库。如:

npm i bob/top-foo

top-foo 的 package.json 有

  "dependencies": {
    "middle-foo": "bob/middle-foo",

middle-foo 的 package.json 有

  "dependencies": {
    "bottom-foo": "bob/bottom-foo",

我在我的 Linux 环境中运行它没有问题,因为我已将我的 ssh 加载到我的 GitHub 帐户中。当然,问题是 Docker 映像以 root 身份启动,我似乎无法弄清楚推送凭据如何向下流入依赖项安装。

我的 Docker 文件目前还挺简单的,因为我什至无法获得身份验证的密钥。我用 ssh-keygen 创建了一个全新的并尝试使用它:

FROM node:6

ARG git_personal_access_token
RUN echo $git_personal_access_token
ARG SSH_PRIVATE_KEY
RUN echo $SSH_PRIVATE_KEY

RUN mkdir /root/.ssh/
RUN chmod 700 /root/.ssh
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com > /root/.ssh/known_hosts
RUN echo $SSH_PRIVATE_KEY > /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa

RUN eval $(ssh-agent);ssh-add;ssh -vvv -T -i /root/.ssh/id_rsa git@github.com

标签: dockergithubnpm

解决方案


我在我的 Linux 环境中运行它没有问题,因为我已将我的 ssh 加载到我的 GitHub 帐户中。

然后您需要将加密的 ssh 密钥嵌入到您的 docker 映像中。
不是您自己的 ssh 私钥,而是专门为此创建的新部署密钥,并且其公钥已注册到相关存储库(而不是注册到您的帐户)。

请参阅“自动将 git repo 的部分推送到 google cloud bucket ”:想法是有一个脚本来解密这些私有加密部署 ssh 密钥并在运行时将它们放入~/root/.ssh容器中,从而允许 docker 访问这些私有 repo。


推荐阅读