Как автоматизировать ввод парольных фраз в docker-контейнеры с помощью скриптов bash?

Мне нужно знать, как автоматизировать процесс ввода парольных фраз для закрытых ключей в контейнерах Docker.

У меня проблема с настройкой контейнера моего веб-приложения с помощью Docker. Во время процесса установки мне нужно запустить composer install в моем контейнере и есть зависимость, которая должна клонировать частный репозиторий git. В этом случае требуется использовать мой закрытый ключ, а ключ защищен парольной фразой. Из-за этого при запуске composer install он должен предоставить парольную фразу для клонирования хранилища. Нет проблем с этим потоком, когда я запускаю эти команды внутри контейнера вручную.

Но я планирую автоматизировать весь этот процесс с помощью bash-скрипта, и когда я запускаю свой bash-скрипт на хост-компьютере, он не запрашивает пароль и завершается с ошибкой «Permission denied (publickey)».

Как автоматизировать весь процесс с помощью скрипта bash, не выходя из скрипта? Я ищу способ что-то вроде этого — запросить парольную фразу во время клонирования этого частного репозитория или любого другого рабочего решения.

1

Решение

Обычно ответ «не». Пароль, введенный во время сборки, будет частью изображения, часто в истории слоя. Если вы не возражаете против того, чтобы пароль был включен в образ, то это зависит от выполняемой команды. Иногда вы можете echo p4ssw0rd | git clone ..., но в других случаях команда намеренно удаляет введенный канал и вызывает запрос на безопасность. Другие команды имеют опции для включения пароля в командной строке с флагом. Некоторые люди будут обрабатывать подобные запросы с помощью сценария «ожидаем», который просматривает вывод и отправляет пароль при появлении запроса. Каждый из них будет помещать пароль внутри изображения.

Для вашего конкретного сценария один из вариантов — добавить пару ключей, для которой не требуется пароль для git. Другим вариантом является извлечение кода вне сборки Docker, и COPY репо в образ вместо того, чтобы позволить git проверить это.

Если вам абсолютно необходимо включить пароль в образ, то посмотрите многоэтапную сборку. Введите свой пароль на первом этапе, а затем скопируйте результат на второй этап, чтобы изображение, которое вы нажимаете, не содержало пароль в слоях изображения.

3

Другие решения

Вы можете использовать секреты для управления любыми конфиденциальными данными, которые нужны контейнеру во время выполнения, но вы не хотите хранить их в изображении или в системе контроля версий.

Примечание. Секреты Docker доступны только для служб роя, а не для отдельных контейнеров. Чтобы использовать эту функцию, рассмотрите возможность адаптации вашего контейнера для запуска в качестве службы. Контейнеры с состоянием обычно могут работать с масштабом 1 без изменения кода контейнера.

Проверьте https://docs.docker.com/engine/swarm/secrets/#how-docker-manages-secrets

1

Я нашел ответ на свой вопрос, и это так просто, как настройка -it флаг в docker exec команда в скрипте bash, который вызывает composer install, Я умышленно пропустил этот флаг, потому что он запускается в скрипте bash, и я не заметил, что потребуется интерактивный режим для запроса pass-phrase,

В любом случае, после изменения скрипта bash, как показано ниже, проблема решена.

docker exec -it {container_name} composer install

И, посмотрев на приведенные выше ответы, я почувствовал, что не дал полной картины относительно проблемы. Поэтому я подумал, что мне нужно добавить некоторые пояснения здесь. Структура bash-скрипта выглядит следующим образом;

  1. Запустите контейнеры с помощью docker-compose
    В этом случае мой код приложения был размещен вне контейнера веб-приложения как docker volume чтобы можно было легко управлять.
  2. Установите зависимости PHP в контейнер веб-приложения с выше docker exec команда
  3. Запустите миграцию базы данных с помощью снова связанных docker exec команды

Итак, моя проблема была со 2-м шагом при установке пакетов composer. Был один пакет, который нужно было клонировать из частного репозитория git во время composer install, Для клонирования используется мой закрытый ключ, и он защищен pass-phrase и там отсутствовали необходимые флаги (-it) для интерактивного режима docker exec команда, сценарий bash был завершен с ошибкой. После настройки -it Флаги теперь проблема исправлена.

1
По вопросам рекламы [email protected]