Я использую докер с ubuntu, и мне нужно смонтировать
/etc/group
/etc/shadow
/etc/gshadow
/etc/passwd
внутри внешнего тома, чтобы пароль не терялся каждый раз, когда мне нужно перестраивать контейнер докеров.
С точки зрения Ubuntu мне просто нужно навсегда переместить этот файл в другую папку, например:
/bck/group
/bck/shadow
/bck/gshadow
/bck/passwd
Я пробовал сделать символьную ссылку в / etc
lrwxrwxrwx 1 root root 21 Mar 7 15:50 group -> /bck/userbackup/group
Но когда я пытаюсь создать нового пользователя, возникает следующая ошибка.
Для моего (очень очень плохого) знания кажется проблема, связанная с правами доступа:
:/etc# adduser createuserxx
Adding user `createuserxx' ...
Adding new group `createuserxx' (1001) ...
groupadd: cannot open /etc/group
adduser: `/usr/sbin/groupadd -g 1001 createuserxx' returned error code 10. Exiting.
Думаю, есть подход получше.
Вы можете добавить пользователя в Dockerfile, а затем использовать полученный контейнер (с созданной вами учетной записью / паролем) в качестве основы для других контейнеров, которые вы создаете.
Помимо всего прочего, монтирование вашего хоста / etc / {passwd, shadow, groups} делает вашу установку очень привязанной к хосту, на котором вы строите контейнеры, что в некотором роде лишает смысла использование контейнеров.
Поэтому я бы предложил сделать что-то вроде:
FROM $YOUR_BASE_OS
RUN useradd -s /bin/bash -g somegroup someuser
<....rest of dockerfile....>
Если вы создаете контейнер только с этими двумя строками и называете его, например, my-base-container, то для всех остальных контейнеров у вас может быть:
FROM my-base-container:latest
RUN some command
CMD some other command