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 gitRUN 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 上不起作用

如何用gitbook写文档并存到github上

由于 ssh 和 https 连接的私有 git 存储库,npm 安装失败

npm install 返回系统调用 spawn git 错误

npm install