Как поделиться ключом SSH через секреты Docker для доступа к частным репозиториям Github? - PullRequest
1 голос
/ 13 мая 2019

Я использую предложение от этого поста для реализации секретов Docker , чтобы я мог использовать локальный ключ SSH для аутентификации доступа к Github для своих контейнеров. Я на MacOS и не использую Docker Swarm. Вот мои настройки:

докер-compose.yml

version: '3.1'

services:
  [servicename]:
    secrets:
     - ssh_private_key

[...]

secrets:
  ssh_private_key:
    file: ~/.ssh/id_rsa

Dockerfile

FROM python:3.7 as intermediate

RUN mkdir /root/.ssh/ 
RUN ln -s /run/secrets/ssh_private_key /root/.ssh/id_rsa
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
COPY requirements_private_repos.txt ./

RUN pip install --no-cache-dir -r requirements_private_repos.txt

Когда я пытаюсь запустить docker-compose build и использовать ключ SSH для извлечения из частных удаленных репозиториев, я получаю следующую ошибку:

Permission denied (publickey).
fatal: Could not read from remote repository.

Я могу удаленно войти в образ докера и увидеть, что секрет создается и заполняется в /run/secrets/ssh_private_key.

Почему ссылка не работает при использовании в Dockerfile? Если секреты докера не являются правильным методом, есть ли лучший способ поделиться ключом SSH от MacOS до Docker?

1 Ответ

3 голосов
/ 13 мая 2019

Вы не можете использовать секреты времени выполнения для фразы сборки.Вы можете использовать многоэтапные сборки, чтобы скопировать секрет в образ, чтобы он был сброшен на следующем этапе, или использовать новые секреты времени сборки, которые были представлены в Docker 18.09.

Для многоэтапногометод, который вы могли бы сделать следующим образом:

FROM python:3.7 as intermediate

COPY id_rsa /root/.ssh/id_rsa # your private key must be on the build context
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
COPY requirements_private_repos.txt ./

RUN pip install --no-cache-dir -r requirements_private_repos.txt

FROM python:3.7

COPY --from=intermediate XXXX YYYY # copy your modules, this image won't have the ssh private key

Для нового метода вы могли бы сделать следующее, не пробовал сам этот метод (необходим ssh-agent, работающий на хосте):

FROM python:3.7 as intermediate

RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
COPY requirements_private_repos.txt ./

RUN --mount=type=ssh pip install --no-cache-dir -r requirements_private_repos.txt

Затем создайте свой образ с помощью:

docker build --ssh default . -t myimage

Проверьте документацию для получения дополнительной информации о новом методе:

https://docs.docker.com/develop/develop-images/build_enhancements/#new-docker-build-secret-information

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...