Как объяснено в " Безопасное создание небольшого образа докера Python из частных репозиториев git ", вам нужно будет использовать с Docker 18.09 +
--ssh
Вы можете использовать флаг --ssh
, чтобы переслать ваш существующий ключ агента SSH сборщику. Вместо передачи данных ключа докер просто уведомит сборщика о том, что такая возможность доступна.
Теперь, когда сборщику требуется доступ к удаленному серверу через SSH, он перезвонит клиенту и попросит его подписать конкретный запрос, необходимый для этого соединения.
Сам ключ никогда не покидает клиента, и как только команда, запросившая доступ, завершится, на стороне сборщика не появляется никакой информации для восстановления этого удаленного соединения позже .
Секреты
Предоставляет параметр монтирования во время сборки в /var/run/secrets
, доступный только для команды, которая его использовала, и не включена в созданный слой.
То есть:
docker build --ssh github_ssh_key=/path/to/.ssh/git_ssh_id_rsa .
с этой командой используется только соединение агента, но не фактическое содержимое закрытого ключа.
никакие другие команды / шаги в Dockerfile не будут иметь к нему доступа.
Dockerfile, на первом этапе многоступенчатой, даст имя ключа github_ssh_key
, чтобы мы могли использовать его при вызове docker build
:
RUN --mount=type=ssh,id=github_ssh_key pip wheel \
--no-cache \
--requirement requirements.txt \
--wheel-dir=/app/wheels
ОП Хесус Гарсия сообщил (в комментариях), что это работает:
Мне пришлось использовать 2 отдельные команды RUN
.
Я не уверен, является ли это ограничением этой новой функции или способом, которым я пытался объединить несколько команд в моем RUN
, но я продолжал получать сообщение об ошибке отказа в доступе с помощью публичного ключа, когда добавлял его как other commands && /bin/sh -c "mount=type=ssh,id=github_ssh_key pip install private-repo"
против RUN --mount=type=ssh,id=github_ssh_key pip install private-repo && more commands ...