【问题标题】:running package.json in docker with reference to a private repository vsts git repository fails due to authentication failure由于身份验证失败,参考私有存储库 vsts git 存储库在 docker 中运行 package.json 失败
【发布时间】:2018-06-13 06:42:06
【问题描述】:

我的主项目有 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 文件运行docker build 时,由于身份验证而失败。

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 密钥吗?

【问题讨论】:

  • 您是否已将 SSH 密钥添加到您的 VSTS 帐户?
  • 是的,我已将 SSH 密钥添加到我的 VSTS 帐户,当我从我的计算机执行 npm install 时,它可以工作。当我执行“docker build”时,dockerfile 具有 npm install 命令,它尝试执行 package.json,而 package.json 又尝试调用其他存储库并失败。为了进行测试,我将我使用的 ssh 密钥放在了镜像构建中,然后它就可以工作了,但我觉得这不是一个好习惯。
  • 需要在 dockerfile 中指定 SSH 密钥。否则会有认证问题。

标签: node.js git docker azure-devops


【解决方案1】:

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

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

    您可以将 SSH 密钥提交到您的 git 存储库中的一个文件中,然后将该文件(SSH 密钥)复制到您的 docker 映像中。详细步骤可以参考gistnpm install from private repo, in docker build


没有办法限制只有读取权限的 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 "
      },
    

【讨论】:

  • 第二点是我正在做的,但是有没有办法限制 ssh 的权限,比如只有读取权限。
  • 要仅使用读取权限进行身份验证,您可以使用 PAT 代替。我在答案末尾添加了它,您可以尝试一下。
猜你喜欢
  • 2018-12-15
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2022-09-28
  • 2022-10-17
  • 1970-01-01
相关资源
最近更新 更多