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

时间:2019-04-09 06:20:59

标签: git docker ssh

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

ssh -A user@myserver

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 .
...

建筑图片:

export DOCKER_BUILDKIT=1
docker build --ssh default=$SSH_AUTH_SOCK -t xxx/xxx .
...
#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

我想念什么?

更新

export DOCKER_BUILDKIT=1
docker build --ssh default -t xxx/xxx .

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

2 个答案:

答案 0 :(得分:2)

您可能现在已经知道或继续进行此操作,但就我而言,我在配置构建时跳过了这一步:

RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

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

答案 1 :(得分:0)

您的错误消息说,它无法验证主机(即您要构建的docker映像)。

要执行git clone via ssh,您必须遵循these steps.

但是,如果要在映像构建过程中克隆存储库。您可以使用https instead of ssh进行克隆。

git clone https://username:password@github.com/username/repository.git

因此,您的Dockerfile应该看起来像这样:

FROM golang
WORKDIR /xxx
RUN git clone https://username:password@github.com/xxx/xxx.git
...

信用Git clone using username and password