docker buildkit mount s sh при использовании переадресации удаленного агента - PullRequest
1 голос
/ 21 января 2020

Я использую функцию --ssh docker buildkit, и она отлично работает локально. Я хочу собрать Docker на удаленном сервере, и для этого я использую флаг -A для пересылки моего локального ключа github, например:

ssh -i "server.pem" -A <user>@<server-ip>

Затем в терминале сервера я запускаю:

ssh -T git@github.com

И я получаю сообщение «Здравствуйте, пользователь», что означает, что переадресация ключей работает нормально.
(На сервере действительно установлен $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 .

Но это не работает. Ошибка:

could not parse ssh: [default]: invalid empty ssh agent socket, make sure SSH_AUTH_SOCK is set

Даже если установлено SSH_AUTH_SOCK

Docker версия: 19.03

Ответы [ 2 ]

0 голосов
/ 22 января 2020

На вашем компьютере должен быть запущен ssh-agent и ключ, добавленный к нему с помощью ssh-add, или используйте ssh -A -o AddKeysToAgent=true при входе в систему. S SH не будет автоматически пересылать ключ, указанный в -i, если вы установить -A афаик. После входа в систему вы можете запустить ssh-add -L, чтобы убедиться, что ваши ключи были перенаправлены, и если вы видите там записи, то docker build --ssh default . теперь должно работать нормально.

eval `ssh-agent`
ssh-add server.pem
ssh -A <user>@<server-ip>
0 голосов
/ 21 января 2020

Ваша проблема в том, что вы указываете явный путь к закрытому ключу. Поддержка монтирования s sh будет использовать ваш агент по умолчанию , но вы сказали, что нет. Попробуйте вместо этого:

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 git@github.com

Вызывается, как показано, это должно показать сообщение "success" от ssh git@github.com линия.

...