#git #ssh-keys #singularity-container
#git #ssh-ключи #сингулярность-контейнер
Вопрос:
Существует ли переносимый способ сделать SSH-ключ хост-системы доступным во время сборки при создании образа singularity из файла определения?
Чтобы дать некоторый контекст:
У меня есть файл определения, в котором в %post
разделе я клонирую частный репозиторий git с использованием SSH, т.е.:
git clone git@github.com:luator/private_repo.git
Это не удается, потому что SSH-ключи хост-системы недоступны в контейнере во время сборки.
Вероятно, я мог бы скопировать ключ в контейнер и удалить его оттуда в конце процесса сборки. Однако для этого мне нужно было бы жестко запрограммировать путь к ключу в файле определения, что плохо при использовании того же файла определения на другом компьютере, где путь отличается. Есть ли более переносимый способ выполнения git clone
работы во время сборки?
Ответ №1:
Вы можете попробовать использовать docker Buildkit, export DOCKER_BUILDKIT=1
чтобы включить эту функцию:
И после этого просто сгенерируйте свои ssh-ключи ( ssh-keygen
и убедитесь, что id_rsa.pub
содержимое вашего файла с открытым ключом находится в вашем github / gitlab / bitbucket)
Простое использование в Dockerfile:
# use you base image
FROM centos AS build
RUM yum install -y git
RUN mkdir -m 700 /root/.ssh;
touch -m 600 /root/.ssh/known_hosts;
ssh-keyscan github.com amp;> /root/.ssh/known_hosts
# update with tour repo
RUN --mount=type=ssh,id=github git clone git@github.com:<USER>/<REPO>.git
А затем создайте образ RUN --mount=type=ssh,id=github git clone git@github.com:<USER>/<REPO>.git
Комментарии:
1. Итак, ваше предложение состоит в том, чтобы использовать Dockerfile и создать это с помощью Singularity? Хотя это может сработать, в моем случае, к сожалению, это не вариант, поскольку мой образ основан на другом, уже существующем образе Singularity (который, я полагаю, не поддерживается Dockerfile).