【问题标题】:How to npm build inside Docker with multiple layers of private repo dependencies如何使用多层私有 repo 依赖项在 Docker 内部构建 npm
【发布时间】:2018-04-30 22:21:06
【问题描述】:

有谁知道如何在必须访问 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

【问题讨论】:

  • 您是否可以分享一些 Dockerfile 详细信息?
  • @kakabali 我无法获得格式正确的评论,所以我编辑了原始帖子。
  • ARG 似乎并不明智:图像的 docker 历史记录会泄露您的密钥...
  • 我一直在尝试各种方法,只是为了让它做任何事情。运气不太好。我完全赞成更好的选择。
  • @kakabali 我能够创建一个部署密钥并将其用于顶级存储库,但我无法将它用于组织中的依赖存储库。机器用户是更好的选择吗?最终,这一切都必须进入构建嵌入式图像的 docker 中。

标签: docker github npm


【解决方案1】:

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

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

参见“Automating pushing parts of a git repo to google cloud bucket”:这个想法是有一个脚本来解密这些私有加密部署 ssh 密钥,并在运行时将它们放入 ~/root/.ssh 容器中,从而允许 docker 访问这些私有存储库。

【讨论】:

  • 我看到了这个,但我认为这些不是我完全拥有的存储库,但可以作为我所在团队的一员访问。我可以在 repo 上进行推送和合并等操作,我没有看到可以让我添加密钥的“设置”选项。
  • @tranzmatt 有没有可能联系组织管理员,并通过他们注册部署密钥?
  • 我得试一试。
  • 我能够创建一个部署密钥并将其用于顶级存储库,但我无法将它用于组织中的依赖存储库。机器用户是更好的选择吗?最终,这一切都必须进入构建嵌入式图像的 docker。
猜你喜欢
  • 2021-12-04
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2018-06-06
相关资源
最近更新 更多