Docker 跨容器持久化用户

Docker 跨容器持久化用户,docker,rstudio-server,Docker,Rstudio Server,对于RStudio Docker主映像,用户/密码信息位于容器中。要创建新用户,您需要在容器内运行adduser,请参阅:。当更新到新容器时,这是一个问题,因为/etc/passwd,/etc/shadow等显然不会在容器中持久存在。我正在考虑像这样将文件装载到主机上 docker run -d -p 8787:8787 \ -v $(pwd)/passwd:/etc/passwd \ -v $(pwd)/shadow:/etc/shadow \ ... rocker/rstudio 但是我不

对于RStudio Docker主映像,用户/密码信息位于容器中。要创建新用户,您需要在容器内运行
adduser
,请参阅:。当更新到新容器时,这是一个问题,因为
/etc/passwd
/etc/shadow
等显然不会在容器中持久存在。我正在考虑像这样将文件装载到主机上

docker run -d -p 8787:8787 \
-v $(pwd)/passwd:/etc/passwd \
-v $(pwd)/shadow:/etc/shadow \
... rocker/rstudio

但是我不确定是否应该将与系统用户关联的文件从容器公开给主机。在添加了用户的情况下,在
rocker/rstudio
的基础上维护一个单独的映像更好吗?还是有其他更好的方法?

我会选择创建一个包含所有用户的新映像。这是最容易重新部署的。从主机装载文件可能会在映像中显示所有权错误的系统文件。如果您需要能够动态调整用户,那么仅为这些文件(未从主机映射)创建一个卷可能会起作用,但您还需要主目录,并且可能需要装载整个/etc,以避免装载单个文件时出现inode问题。

我会选择使用您需要的所有用户创建一个新映像。这是最容易重新部署的。从主机装载文件可能会在映像中显示所有权错误的系统文件。如果您需要能够动态调整用户,那么仅针对这些文件(未从主机映射)的卷可能会工作,但您还需要主目录,并且可能需要装载整个/etc,以避免装载单个文件时出现inode问题。

我理解,这并不是问题所在,但你所尝试的之所以如此困难,是因为这样做是错误的

你可以通过使用某种PAM插件将一些用户(从你的应用程序)移动到另一个身份验证插件,也可以使用一个文件进行定义,比如/etc/rstudio_用户,这与stfp和ftp用户的操作非常相似。然后,您可以安全地跨容器共享此文件,而无需处于“停止共享所有用户,也包括系统用户”的可怕状态,这将在某个时刻关闭您最初的概念


如果您希望正确地执行此操作,请使用LDAP之类的工具正确地共享身份验证数据

我理解,这不是问题所在,但您尝试的操作之所以如此困难,是因为这样做是错误的

你可以通过使用某种PAM插件将一些用户(从你的应用程序)移动到另一个身份验证插件,也可以使用一个文件进行定义,比如/etc/rstudio_用户,这与stfp和ftp用户的操作非常相似。然后,您可以安全地跨容器共享此文件,而无需处于“停止共享所有用户,也包括系统用户”的可怕状态,这将在某个时刻关闭您最初的概念

如果希望正确地执行此操作,请使用LDAP之类的工具正确地共享身份验证数据