node.js - 由于身份验证失败,参考私有存储库 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 密钥吗?
解决方案
要解决问题,请检查以下方面:
- 确保 SSH 密钥已添加到 VSTS 帐户
确保 Docker 映像中也提供了 SSH 密钥。
您可以将 SSH 密钥提交到文件中的 git 存储库中,然后将文件(SSH 密钥)复制到您的 docker 映像中。您可以在 docker build 中参考来自私有 repo 的 gist npm install 以了解详细步骤。
只有读取权限才能限制 SSH 密钥。但是你可以使用个人访问令牌(PAT)来实现(使用 HTTP 协议而不是 SSH 协议)。详情如下:
仅在选择代码(读取)范围的情况下创建 PAT
在 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 " },
推荐阅读
- c - 试图比较两种排序算法的空间复杂度。不知道如何解读答案
- wpf - 阻止从不同线程启动 WPF 对话框
- c# - 将上下文信息从 Web 应用程序传递到机器人框架的最佳方式是什么
- ios - WebRTC iOS Safari - 2+ 远程流,只有 1 回放
- javascript - 您将如何解释以下 javascript 代码段?
- spring - Spring 数据规范 join 和 group by 查询
- sql-server - 创建的连接列变量的更改顺序
- javascript - 它不会增加位置
- c++ - 标准::地图
执行 m[0] 时崩溃 - android - React:Android 应用 webview 上的 useEffect 性能问题?