首页 > 解决方案 > 由于身份验证失败,参考私有存储库 vsts git 存储库在 docker 中运行 package.json 失败

问题描述

我的主项目有 package.json,它与另一个私有 VSTS Git 存储库有依赖关系

"dependencies": {
    "sk-api": "git+ssh://My-tfs@vs-ssh.visualstudio.com:22/tk-api/_ssh/tk-api#v1.1.7",
    "sk-modes": "git+ssh://My-tfs@vs-ssh.visualstudio.com:22/tk-modes/_ssh/tk-modes#tk"
  },

在我的桌面上,我已经安装了 SSH 密钥,所以当我运行npm install它时它可以工作。但是当我运行docker build我的 docker 文件时,它由于身份验证而失败。

npm 错误!主机密钥验证失败。npm 错误!致命:无法从远程存储库中读取。

FROM node:boron

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Set env
ENV PORT 3000

# Install app dependencies
ADD package.json /tmp/package.json
RUN cd /tmp && npm install

# Bundle app source
ADD . /usr/src/app

# Open port to access server
EXPOSE $PORT
# Execute as bash script to pass along env variables
CMD npm start

解决此问题的最佳方法是什么。还应该在运行 npm install 之前复制 docker 文件中的 ssh 密钥吗?

标签: node.jsgitdockerazure-devops

解决方案


要解决问题,请检查以下方面:

  1. 确保 SSH 密钥已添加到 VSTS 帐户
  2. 确保 Docker 映像中也提供了 SSH 密钥。

    您可以将 SSH 密钥提交到文件中的 git 存储库中,然后将文件(SSH 密钥)复制到您的 docker 映像中。您可以在 docker build 中参考来自私有 repo 的 gist npm install 以了解详细步骤。


只有读取权限才能限制 SSH 密钥。但是你可以使用个人访问令牌(PAT)来实现(使用 HTTP 协议而不是 SSH 协议)。详情如下:

  1. 仅在选择代码(读取)范围的情况下创建 PAT

    在此处输入图像描述

  2. 在 git repo URL 中使用 PAT

    使用 URL 格式:

    git+https://Personal%20Access%20Token:PAT@account.visualstudio.com/project/_git/repo

    例如,您可以将 package.json 文件中的依赖项更改为:

    "dependencies": {
        "sk-api": "git+https://Personal%20Access%20Token:adsvso24n1nd6o7vydn3hsfvb5nicrqrbjm5umwrxnktglemajta@My-tfs.visualstudio.com/tk-api/_git/tk-api ",
        "sk-modes": "git+https://Personal%20Access%20Token:adsvso24n1nd6o7vydn3hsfvb5nicrqrbjm5umwrxnktglemajta@My-tfs.visualstudio.com/tk-modes/_git/tk-modes "
      },
    

推荐阅读