Постоянные пользователи через контейнеры
Для основного образа RStudio Docker информация о пользователе / пароле находится в контейнере. Для создания нового пользователя вам нужно запустить adduser
внутри контейнера см.: https://github.com/rocker-org/rocker/wiki/Using-the-RStudio-image. Это проблема при обновлении до нового контейнера, так как /etc/passwd
, /etc/shadow
и т. д. не будет сохраняться через контейнеры. Я думал о монтировании файлов на хосте так
docker run -d -p 8787:8787 \
-v $(pwd)/passwd:/etc/passwd \
-v $(pwd)/shadow:/etc/shadow \
... rocker/rstudio
Но я не уверен, должны ли файлы, связанные с системными пользователями, быть доступными из контейнера для хоста. Лучше ли поддерживать отдельное изображение, построенное поверх rocker/rstudio
с добавленными пользователями, или есть что-то еще лучше?
2 ответа
Я понимаю, что это был не вопрос - но причина, по которой так трудно делать то, что вы пытаетесь, - потому что это неправильный путь.
Вы можете обойти это, используя какой-то плагин PAM, чтобы переместить несколько пользователей (из вашего приложения) в другой плагин auth, который также может использовать файл для определения, например /etc/rstudio_users - очень похожий, так как сделано с stfp и пользователями ftp. После этого вы можете безопасно делиться этим файлом между контейнерами, не останавливаясь перед всеми пользователями, а также системными пользователями, что в какой-то момент приведет к отключению вашей первоначальной концепции.
Если вы хотите, чтобы это было сделано правильно, используйте что-то вроде LDAP для правильного обмена данными аутентификации
Я бы выбрал создание нового изображения со всеми нужными пользователями. Это самое простое для повторного развертывания. Монтирование файлов с хоста может привести к отображению системных файлов в образе с неправильным владельцем. Если вам нужно иметь возможность настраивать пользователей на лету, то может работать том только для этих файлов (не сопоставленных с хостом), но вам также понадобятся домашние каталоги и, возможно, потребуется смонтировать весь /etc во избежание inode проблемы при монтировании отдельных файлов.