我在 ubuntu 中使用 docker,我需要挂载
/etc/group
/etc/shadow
/etc/gshadow
/etc/passwd
在外部卷内,以避免每次重建docker容器时密码丢失。
从 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.
答案1
我认为可能还有更好的方法。
您可以在 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