Как использовать смонтированный ssh ​​в докере для последующих команд в Dockerfile

Мне нужно выполнить git push при запуске моего контейнера с помощью CMD. Но ssh недоступен в последней строке, то есть в части CMD, чтобы выполнить git push. Что я могу сделать здесь, чтобы получить ssh-ключ для git push? Кто-нибудь, пожалуйста, помогите мне.

Найдите мой Dockerfile

# syntax = docker/dockerfile:1.0-experimental
FROM continuumio/anaconda3

# Install git
RUN apt-get update && apt-get install -y git

# Download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

# Clone private repository
RUN --mount=type=ssh git clone git@github.com:myorg/myproject.git myproject

CMD python myproject/src/example.py && git push

Затем я использую следующую команду, чтобы передать свой ключ ssh во время запуска

docker build --ssh default .

2 ответа

Решение

Как видно из разделов " BuildKit / Использование SSH для доступа к личным данным в сборках " и " Секреты сборки и перенаправление SSH в Docker 18.09 ", я вижу, что это используется с:

  • --mount=type=ssh
  • только на RUN линии, а не CMD

Так что это будет работать с RUN, в течение docker build.
Это может не работать во время выполнения (docker run) с CMD

Для потомков: есть 3 обязательных условия для этой работы, поэтому убедитесь, что сборка использует buildx внутриDockerfileты используешьRUNкоманда с--mount=type=sshи ты проходишь мимо--ssh defaultпараметр команды сборки:

      export DOCKER_BUILDKIT=1

FROM ...
RUN --mount=type=ssh композитор установить --no-dev --no-interaction

      docker build --ssh default .
Другие вопросы по тегам