Использовать SSH-ключ хоста во время сборки Singularity

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