将 ssh 代理套接字转发到 docker build

Jon*_*nas 1 git ssh docker

连接到我构建 docker 镜像的服务器

ssh -A user@myserver
Run Code Online (Sandbox Code Playgroud)

Dockerfile

# syntax=docker/dockerfile:experimental

FROM golang
WORKDIR /go/src/github.com/xxx/xxx
RUN --mount=type=ssh git clone git@github.com:xxx/xxx.git .
...
Run Code Online (Sandbox Code Playgroud)

建筑形象:

export DOCKER_BUILDKIT=1
docker build --ssh default=$SSH_AUTH_SOCK -t xxx/xxx .
Run Code Online (Sandbox Code Playgroud)
...
#8 1.579 Host key verification failed.
#8 1.579 fatal: Could not read from remote repository.
#8 1.579 
#8 1.579 Please make sure you have the correct access rights
#8 1.579 and the repository exists.
------
rpc error: code = Unknown desc = executor failed running [/bin/sh -c git clone git@github.com:xxx/xxx.git .]: exit code: 128
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

更新

export DOCKER_BUILDKIT=1
docker build --ssh default -t xxx/xxx .
Run Code Online (Sandbox Code Playgroud)

本地构建会产生相同的结果。

JRa*_*ond 5

您现在可能已经明白了这一点或继续前进,但就我而言,我在配置构建时跳过了这一步:

RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

事实证明,如果 .ssh 目录不存在,ssh 会厌恶地举手而不检查代理,然后如果您没有导入服务器的公钥,则会提前失败。