Мне нужно знать, как автоматизировать процесс ввода парольных фраз для закрытых ключей в контейнерах Docker.
У меня проблема с настройкой контейнера моего веб-приложения с помощью Docker. Во время процесса установки мне нужно запустить composer install
в моем контейнере и есть зависимость, которая должна клонировать частный репозиторий git. В этом случае требуется использовать мой закрытый ключ, а ключ защищен парольной фразой. Из-за этого при запуске composer install
он должен предоставить парольную фразу для клонирования хранилища. Нет проблем с этим потоком, когда я запускаю эти команды внутри контейнера вручную.
Но я планирую автоматизировать весь этот процесс с помощью bash-скрипта, и когда я запускаю свой bash-скрипт на хост-компьютере, он не запрашивает пароль и завершается с ошибкой «Permission denied (publickey)».
Как автоматизировать весь процесс с помощью скрипта bash, не выходя из скрипта? Я ищу способ что-то вроде этого — запросить парольную фразу во время клонирования этого частного репозитория или любого другого рабочего решения.
Обычно ответ «не». Пароль, введенный во время сборки, будет частью изображения, часто в истории слоя. Если вы не возражаете против того, чтобы пароль был включен в образ, то это зависит от выполняемой команды. Иногда вы можете echo p4ssw0rd | git clone ...
, но в других случаях команда намеренно удаляет введенный канал и вызывает запрос на безопасность. Другие команды имеют опции для включения пароля в командной строке с флагом. Некоторые люди будут обрабатывать подобные запросы с помощью сценария «ожидаем», который просматривает вывод и отправляет пароль при появлении запроса. Каждый из них будет помещать пароль внутри изображения.
Для вашего конкретного сценария один из вариантов — добавить пару ключей, для которой не требуется пароль для git. Другим вариантом является извлечение кода вне сборки Docker, и COPY
репо в образ вместо того, чтобы позволить git проверить это.
Если вам абсолютно необходимо включить пароль в образ, то посмотрите многоэтапную сборку. Введите свой пароль на первом этапе, а затем скопируйте результат на второй этап, чтобы изображение, которое вы нажимаете, не содержало пароль в слоях изображения.
Вы можете использовать секреты для управления любыми конфиденциальными данными, которые нужны контейнеру во время выполнения, но вы не хотите хранить их в изображении или в системе контроля версий.
Примечание. Секреты Docker доступны только для служб роя, а не для отдельных контейнеров. Чтобы использовать эту функцию, рассмотрите возможность адаптации вашего контейнера для запуска в качестве службы. Контейнеры с состоянием обычно могут работать с масштабом 1 без изменения кода контейнера.
Проверьте https://docs.docker.com/engine/swarm/secrets/#how-docker-manages-secrets
Я нашел ответ на свой вопрос, и это так просто, как настройка -it
флаг в docker exec
команда в скрипте bash, который вызывает composer install
, Я умышленно пропустил этот флаг, потому что он запускается в скрипте bash, и я не заметил, что потребуется интерактивный режим для запроса pass-phrase
,
В любом случае, после изменения скрипта bash, как показано ниже, проблема решена.
docker exec -it {container_name} composer install
И, посмотрев на приведенные выше ответы, я почувствовал, что не дал полной картины относительно проблемы. Поэтому я подумал, что мне нужно добавить некоторые пояснения здесь. Структура bash-скрипта выглядит следующим образом;
docker volume
чтобы можно было легко управлять.docker exec
команда docker exec
командыИтак, моя проблема была со 2-м шагом при установке пакетов composer. Был один пакет, который нужно было клонировать из частного репозитория git во время composer install
, Для клонирования используется мой закрытый ключ, и он защищен pass-phrase
и там отсутствовали необходимые флаги (-it
) для интерактивного режима docker exec
команда, сценарий bash был завершен с ошибкой. После настройки -it
Флаги теперь проблема исправлена.