DevOps зарисовки
Задача: есть докер с некоторым сервисом. Нужно динамически добавлять и удалять пользователей внутри контейнера через скрипт. При этом иметь скрипт инициализации на случай деплоя с нуля.
Решение: нужно через bash, а даже через sh (в alpine по дефолту не установлен bash) уметь добавлять пользователей.
Варианты:
PASSWD="somepassword" ; echo -e "$PASSWDn$PASSWD"
|docker exec -i container passwd
Еще предлагают варианты добавить флаг
passwd
--stdin
У меня такой вариант не сработал. Т.е. скрипт отрабатывает, но пароль в итоге не выставился нужный. Какой был установлен — не понял. Мой финальный вариант с добавлением пользователя и сменой пароля выглядит так:
#!/bin/sh
PASS='job'; echo -e "$PASSn$PASS"
|docker exec -i container adduser geek
echo "geek:$PASS" |docker exec -i container chpasswd
Такой скрипт сработал. Он добавляет пользователя и устанавливает ему пароль. Судя по всему в первом проходе при добавлении пользователя пароль “бьется” или вовсе не передается на вход, но при этом мы обходим интерактивность (так как adduser просит задать пароль в интерактивном режиме).
Если знаете как сделать лучше — напишите в комментарии, пожалуйста. А я пока заюзал такой вариант и он решает мои задачи.
UPD
Посоветовали одну репу, в которой есть примеры скриптов для работы с пользователями внутри докера: https://github.com/schors/tgdante2/tree/master/dante/files/scripts