【发布时间】:2019-10-21 06:33:56
【问题描述】:
我正在尝试使用 Docker 为我构建一个镜像,导入一个托管在私有 github 存储库中的 npm 包:"mypackage": "git@github.com:myaccount/myrepo.git#v0.0.2"
这在本地可以正常工作,因为我有 SSH 访问权限,但显然我的 Docker 容器没有。我已按照以下指南使用 18.09 中启用的一些 ssh 转发来实现这一点:
https://medium.com/@tonistiigi/build-secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066
使用以下 docker 文件:
# syntax=docker/dockerfile:experimental
FROM alpine
# Install ssh client and git
RUN apk add --no-cache openssh-client git
# Download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
# Clone private repository
RUN --mount=type=ssh npm install
然后,运行 docker build --ssh default . 失败并出现以下错误:
#13 1.309 npm ERR! Host key verification failed.
#13 1.309 npm ERR! fatal: Could not read from remote repository.
#13 1.309 npm ERR!
#13 1.309 npm ERR! Please make sure you have the correct access rights
#13 1.309 npm ERR! and the repository exists.
#13 1.310 npm ERR!
#13 1.310 npm ERR! exited with error code: 128
我正在严格遵守此文档,但没有运气。我错过了什么吗?我在 OSX 上,但是在我的 Travis 环境中也出现了同样的错误。救命!
【问题讨论】:
-
您是否正在运行
ssh-agent或者您只是使用默认的.ssh/id_rsa键? -
嗯,使用默认即可;或者至少我认为。我该如何检查?
-
--ssh标志将连接从构建器转发到ssh-agent。它不会共享密钥所在的.ssh文件夹。你需要运行ssh-agent。 -
它是作为守护进程运行的还是什么?这是要在 Dockerfile 中运行的命令的一部分吗?
-
它在后台运行,是的。在使用
docker build --ssh default之前运行ssh-agent。默认设置应该匹配。