我使用--ssh
docker buildkit功能,它在本地运行良好。我想在远程服务器上构建Docker,为此,我使用-A
标志转发本地github密钥,例如:
ssh -i "server.pem" -A <user>@<server-ip>
然后在服务器终端中运行:
ssh -T [email protected]
并且我收到“ Hello user”消息,这意味着密钥转发工作正常。(在服务器中,确实设置了$SSH_AUTH_SOCK
,我可以git clone
)
现在,在本地构建时,我使用:
DOCKER_BUILDKIT=1 docker build --ssh default=~/.ssh/id_rsa -t myimage:latest .
哪个工作正常。但是在服务器中,私钥在〜/ .ssh / id_rsa不存在。那么如何将其转发到docker build?在服务器中尝试过:
DOCKER_BUILDKIT=1 docker build --ssh default=$SSH_AUTH_SOCK -t myimage:latest .
但是它不起作用。
Docker版本:19.03
您的问题是您要指定私钥的显式路径。 ssh挂载支持将使用您的代理默认情况下,但是您已经告诉它不要这样做。请尝试:
DOCKER_BUILDKIT=1 docker build --ssh default -t myimage:latest .
我正在使用以下Dockerfile
进行测试:
# syntax=docker/dockerfile:experimental
FROM alpine
RUN apk add --update git openssh
RUN mkdir -m 700 /root/.ssh; \
printf "Host *\nStrictHostkeyChecking no" > /root/.ssh/config; \
chmod 600 /root/.ssh/config
RUN --mount=type=ssh ssh [email protected]
如图所示,它应该显示ssh [email protected]
行中的“成功”消息。
您需要在计算机上运行ssh-agent
并用ssh-add
添加密钥,或者在登录时使用ssh -A -o AddKeysToAgent=true
。如果设置-i
,SSH将不会自动转发用-A
指定的密钥。据我所知。登录后,您可以运行ssh-add -L
以确保您的密钥已转发,并且如果您在那里看到记录,那么docker build --ssh default .
现在应该可以正常工作。
eval `ssh-agent`
ssh-add server.pem
ssh -A <user>@<server-ip>