Клонирование Git через SSH не работает во время сборки образа Docker для пользователя без полномочий root ⇐ Linux
Клонирование Git через SSH не работает во время сборки образа Docker для пользователя без полномочий root
Мой хост-докер — Debian 12.2. Я могу клонировать частный репозиторий git через SSH на хосте. Я пытаюсь сделать то же самое во время процесса сборки образа докера. Я перенаправляю SSH-агент моего хоста во время сборки докера. Он работает, когда пользователь root активен во время процесса сборки, но не работает, когда пользователь не root. Мне нужно, чтобы этот процесс работал для пользователя не root в рамках проекта, над которым я работаю. Любая помощь приветствуется.
Dockerfile выглядит следующим образом:
FROM ubuntu:20.04 AS окончательная сборка SHELL ["/bin/bash", "-c"] # Необходимые определения для создания образа ARG DEBIAN_FRONTEND=неинтерактивный # Установите необходимое программное обеспечение ЗАПУСК apt update && apt update && apt install -y git # Добавить и переключить пользователя ПОЛЬЗОВАТЕЛЬ АРГ АРГ UID АРГ ГИД АРГ ПВ=а ВЫПОЛНИТЬ useradd -m ${USER} --uid=${UID} RUN echo "${USER}:${PW}" | chpasswd # ПОЛЬЗОВАТЕЛЬ ${UID}:${GID} АРГ GIT_СЕРВЕР АРГ ПРОЕКТ # Создайте каталог SSH и установите разрешения # Добавляем репозиторий в список известных хостов для ssh ВЫПОЛНИТЬ mkdir -p ${HOME}/.ssh && \ ssh-keyscan ${GIT_SERVER} >> ${HOME}/.ssh/known_hosts ARG REPO=git@${GIT_SERVER}: АРГ ФИЛИАЛ РАБОЧИЙ ДИАПАЗОН ${HOME}/src # Загрузите исходный код проекта RUN --mount=type=ssh git clone --branch ${BRANCH} --single-branch \ ${РЕПО} ${ПРОЕКТ} Процесс сборки образа Docker выглядит следующим образом:
target="final-build" оценка $(ssh-агент) ssh-добавить options="-f Dockerfile \ --build-arg GIT_SERVER=${GIT_SERVER} \ --build-arg ПРОЕКТ=${ПРОЕКТ} \ --build-arg BRANCH=${BRANCH} \ --build-arg USER=${USER} --build-arg UID=$(id -u) \ --build-arg GID=$(id -u) \ --ssh default -t test --progress=auto" # Создаем образ докера docker buildx build --target=${target} ${options} . Переменные среды загружаются правильно, поскольку репозиторий правильно клонирован с помощью приведенного выше Dockerfile. Однако, если я раскомментирую эту строку:
ПОЛЬЗОВАТЕЛЬ ${UID}:${GID} в Dockerfile и попытайтесь создать образ, я получаю следующую ошибку:
=> ОШИБКА [final-build 8/8] RUN --mount=type=ssh git clone --branch main --single-branch git@ 0,3 с ------ > [final-build 8/8] RUN --mount=type=ssh git clone --branch main --single-branch git@ : 0.174 Клонирование в ''... 0.273 Предупреждение: ключ хоста ECDSA для IP-адреса «» навсегда добавлен в список известных хостов. 0.326 git@: разрешение отклонено (открытый ключ, интерактивная клавиатура). 0,326 фатальный: невозможно прочитать из удаленного репозитория. 0,326 0.326 Пожалуйста, убедитесь, что у вас есть правильные права доступа. 0.326 и репозиторий существует. ------ Докерфайл:35 -------------------- 34 | # Загрузите исходный код проекта 35 | >>> RUN --mount=type=ssh git clone --branch ${BRANCH} --single-branch \ 36 | >>> ${РЕПО} ${ПРОЕКТ} 37 | -------------------- ОШИБКА: не удалось решить: процесс «/bin/bash -c git clone --branch ${BRANCH} --single-branch ${REPO} ${PROJECT}» не завершился успешно: код выхода: 128 Очевидно, что как только пользователь не root переключится, пересылаемый SSH-агент станет недоступным.
Как заставить это работать для пользователя не root?
P.S.: Я бы не хотел копировать ключи SSH в изображение, поскольку ключи доступны внутри изображения.
Мой хост-докер — Debian 12.2. Я могу клонировать частный репозиторий git через SSH на хосте. Я пытаюсь сделать то же самое во время процесса сборки образа докера. Я перенаправляю SSH-агент моего хоста во время сборки докера. Он работает, когда пользователь root активен во время процесса сборки, но не работает, когда пользователь не root. Мне нужно, чтобы этот процесс работал для пользователя не root в рамках проекта, над которым я работаю. Любая помощь приветствуется.
Dockerfile выглядит следующим образом:
FROM ubuntu:20.04 AS окончательная сборка SHELL ["/bin/bash", "-c"] # Необходимые определения для создания образа ARG DEBIAN_FRONTEND=неинтерактивный # Установите необходимое программное обеспечение ЗАПУСК apt update && apt update && apt install -y git # Добавить и переключить пользователя ПОЛЬЗОВАТЕЛЬ АРГ АРГ UID АРГ ГИД АРГ ПВ=а ВЫПОЛНИТЬ useradd -m ${USER} --uid=${UID} RUN echo "${USER}:${PW}" | chpasswd # ПОЛЬЗОВАТЕЛЬ ${UID}:${GID} АРГ GIT_СЕРВЕР АРГ ПРОЕКТ # Создайте каталог SSH и установите разрешения # Добавляем репозиторий в список известных хостов для ssh ВЫПОЛНИТЬ mkdir -p ${HOME}/.ssh && \ ssh-keyscan ${GIT_SERVER} >> ${HOME}/.ssh/known_hosts ARG REPO=git@${GIT_SERVER}: АРГ ФИЛИАЛ РАБОЧИЙ ДИАПАЗОН ${HOME}/src # Загрузите исходный код проекта RUN --mount=type=ssh git clone --branch ${BRANCH} --single-branch \ ${РЕПО} ${ПРОЕКТ} Процесс сборки образа Docker выглядит следующим образом:
target="final-build" оценка $(ssh-агент) ssh-добавить options="-f Dockerfile \ --build-arg GIT_SERVER=${GIT_SERVER} \ --build-arg ПРОЕКТ=${ПРОЕКТ} \ --build-arg BRANCH=${BRANCH} \ --build-arg USER=${USER} --build-arg UID=$(id -u) \ --build-arg GID=$(id -u) \ --ssh default -t test --progress=auto" # Создаем образ докера docker buildx build --target=${target} ${options} . Переменные среды загружаются правильно, поскольку репозиторий правильно клонирован с помощью приведенного выше Dockerfile. Однако, если я раскомментирую эту строку:
ПОЛЬЗОВАТЕЛЬ ${UID}:${GID} в Dockerfile и попытайтесь создать образ, я получаю следующую ошибку:
=> ОШИБКА [final-build 8/8] RUN --mount=type=ssh git clone --branch main --single-branch git@ 0,3 с ------ > [final-build 8/8] RUN --mount=type=ssh git clone --branch main --single-branch git@ : 0.174 Клонирование в ''... 0.273 Предупреждение: ключ хоста ECDSA для IP-адреса «» навсегда добавлен в список известных хостов. 0.326 git@: разрешение отклонено (открытый ключ, интерактивная клавиатура). 0,326 фатальный: невозможно прочитать из удаленного репозитория. 0,326 0.326 Пожалуйста, убедитесь, что у вас есть правильные права доступа. 0.326 и репозиторий существует. ------ Докерфайл:35 -------------------- 34 | # Загрузите исходный код проекта 35 | >>> RUN --mount=type=ssh git clone --branch ${BRANCH} --single-branch \ 36 | >>> ${РЕПО} ${ПРОЕКТ} 37 | -------------------- ОШИБКА: не удалось решить: процесс «/bin/bash -c git clone --branch ${BRANCH} --single-branch ${REPO} ${PROJECT}» не завершился успешно: код выхода: 128 Очевидно, что как только пользователь не root переключится, пересылаемый SSH-агент станет недоступным.
Как заставить это работать для пользователя не root?
P.S.: Я бы не хотел копировать ключи SSH в изображение, поскольку ключи доступны внутри изображения.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Pip не требует установки пользователя root, но требует пользователя root для обновления.
Anonymous » » в форуме Python - 0 Ответы
- 42 Просмотры
-
Последнее сообщение Anonymous
-