npm install git+ssh 在 docker (node16) 中失败
Posted
技术标签:
【中文标题】npm install git+ssh 在 docker (node16) 中失败【英文标题】:npm install git+ssh failing in docker (node16) 【发布时间】:2021-12-26 17:09:15 【问题描述】:谁能解释为什么从node:14-alpine
切换到node:16-alpine
会导致npm install 失败?
> [ 8/10] RUN --mount=type=ssh npm i:
#14 14.27 npm ERR! code 128
#14 14.28 npm ERR! An unknown git error occurred
#14 14.28 npm ERR! command git --no-replace-objects ls-remote ssh://git@github.com/(somerepo).git
#14 14.28 npm ERR! Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
#14 14.28 npm ERR! git@github.com: Permission denied (publickey).
#14 14.28 npm ERR! fatal: Could not read from remote repository.
#14 14.28 npm ERR!
#14 14.28 npm ERR! Please make sure you have the correct access rights
#14 14.28 npm ERR! and the repository exists.
这是一个:
git+ssh://git@github.com:someorg/somerepo
依赖。构建运行使用:
DOCKER_BUILDKIT=1 docker build --ssh default .
我在image 中找不到任何明显的变化,这让我怀疑 npm(从 6.14.15 到 8.1.0),但我找不到任何记录的内容(而且它工作正常,在容器)
编辑:Dockerfile 看起来像这样:
# syntax=docker/dockerfile:experimental
FROM node:16-alpine
RUN apk --no-cache --virtual build-dependencies add \
python2 \
make \
g++ \
git \
openssh
# Download public key for github.com
RUN mkdir -p /root/.ssh && \
chmod 0700 /root/.ssh && \
ssh-keyscan github.com >> /root/.ssh/known_hosts
WORKDIR /app/
RUN chown -R node $PWD
RUN apk add postgresql-client
ADD ./service/package.json .
RUN --mount=type=ssh npm i
RUN apk del build-dependencies && rm -r /root/.ssh
ADD ./service/ .
CMD node ./app.js
USER node
我所做的唯一更改是FROM
编辑 2:如果我在节点 14 映像中更新 npm(到 8.1.3),我会遇到同样的问题。但是即使在工作版本中运行ssh -Tv git@github.com
也会失败,所以我不知道到目前为止一直在使用什么黑魔法构建套件
【问题讨论】:
我已经做过好几次了,从来没有遇到过问题(MacOS 多次升级和降级)。你的 Dockerfile 是什么样的?您是否尝试过删除所有缓存的图层?尝试通过运行RUN apk add --no-cache openssh-client git
和RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
在您的 npm install 命令之前执行 clean openssh 和 git install。
> 您是否尝试过删除所有缓存层?没有任何缓存层,因为我更改了第一行。但是,是的,修剪 af
permission denied (publickey)
行表示您正在使用 ssh(您要求的,所以这一切都很好)并且您的 ssh 调用了 GitHub 的 ssh 服务器(到目前为止还可以),移交了您的公共密钥(它应该这样做),然后从 GitHub 得到答案:“这个密钥不好。”所以你的钥匙坏了,或者你交错了。使用ssh -Tv git@github.com
查看您交出的密钥并观看密钥交换过程。
为什么它适用于节点 14,但不适用于 16 图像?
> 使用 ssh -Tv git@github.com 这是个好主意,谢谢
【参考方案1】:
问题似乎出在chown
上,在npm i
修复它之后移动了它(尽管首先是故意这样做的,因为 chown 所有这些文件需要很长时间)。
我不知道为什么这会影响 ssh。
【讨论】:
以上是关于npm install git+ssh 在 docker (node16) 中失败的主要内容,如果未能解决你的问题,请参考以下文章
git+ssh 在像 git+ssh://git@github.com/xxx.git 这样的 npm repo 路径中是啥意思
为啥 npm install 在 git bash 上不起作用
由于 ssh 和 https 连接的私有 git 存储库,npm 安装失败