GitHub репозиторий для создания сервиса - PullRequest
0 голосов
/ 30 октября 2019

Мне нужно использовать частный репозиторий GitHub для создания службы example. Я добавил not_so_private_id_rsa в качестве ключа развертывания в репозитории GitHub.

docker-compose.yml

version: '3.7'
services:
 db:
  ...
 web:
  ...
 example:
  build: git@github.com:example/example.git
  volumes:
   - '~/.ssh/not_so_private_id_rsa:/root/.ssh/id_rsa'

Когда я запускаю docker-compose build на macOS10.15 (Каталина) Я получаю эту ошибку:

$ docker-compose build
Building example
ERROR: error fetching: error: cannot run ssh: No such file or directory
fatal: unable to fork
: exit status 128

Вопросы

  1. Это правильный способ использования частного репозитория GitHub в docker-compose.yml?
  2. Как я могу это исправить?

PS: мне известно о Docker Compose: не удается запустить ssh: нет такого файла или каталога , но он не содержит решения для моей проблемы.

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Безусловно, лучший способ сделать это - клонировать репозиторий на хост-компьютере. Часто вы можете зафиксировать Dockerfile и docker-compose.yml в хранилище, и тогда все будет в одном месте.

git clone git@github.com:example/example
cd example
docker-compose up --build

Запуск git clone в Dockerfile имеет несколько основных проблем. Стандартное кэширование слоя docker build пропустит команду, которая, по его мнению, уже запущена, поэтому вы склонны пропускать текущие коммиты. Вы можете очень разумно захотеть создать образ, основанный на незафиксированном коде или на ветке, который трудно выразить во внешнем Dockerfile. Но самая большая проблема - учетные данные.

Указанный вами путь не будет работать, поскольку строки build: и volumes: рассматриваются в два отдельных этапа. Вы должны использовать многоэтапную сборку, чтобы иметь возможность проверять хранилище, но не передавать учетные данные другим людям, которые могут получить копию вашего изображения. Это может выглядеть примерно так:

FROM ubuntu:18.04 AS checkout
ARG commit=master
RUN apt-get update \
 && apt-get install --assume-yes --no-install-recommends \
      git-core \
      openssh-client
COPY .ssh /root/.ssh
RUN chmod 0400 /root/.ssh/*
WORKDIR /app
RUN git clone git@github.com:example/example \
 && cd example \
 && git checkout $commit

FROM something
WORKDIR /app
COPY --from=checkout /app/example .
...

Даже в этом случае вам нужна пара ключей ssh ​​в локальном каталоге сборки (которую вам придется скопировать вручную), и вы должны быть осторожны, чтобы не случайно COPYэто в окончательное изображение.

0 голосов
/ 31 октября 2019

Нельзя указывать подробные инструкции по сборке, подобные этой, только в пределах docker-compose.yml

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