在远程host主机上运行docker容器,容器中应用程序都是用admin
用户运行,并且通过Docker volume方式将容器中数据共享存储到host主机的volume中。
在host主机创建admin
用户账号,uid
和gid
和容器中admin
用户相同,目的是在host主机上能够直接通过/var/lib/docker/volumes
来访问各个容器中的共享数据,方便备份、开发和数据同步。
由于Docker的目录安全要求,/var/lib/docker
子目录只对root用户可读写。通过以下命令适当放宽给**root
用户组**:
chmod 751 /var/lib/docker
chmod 750 /var/lib/docker/volumes
然后将host主机上admin
用户添加到root
分组
usermod -a -G root admin
此时host主机上root用户切换到admin
用户身份可以验证admin
用户已经属于root
用户组:
[root@devstack ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@devstack ~]# su - admin
[admin@devstack ~]$ id
uid=505(admin) gid=505(admin) groups=505(admin),0(root),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
但是,远程ssh以admin
用户身份登陆,却发现admin
用户的id
是不同的,这显示主用户组groups=505(admin)
:
$ ssh [email protected]
[admin@devstack ~]$ id
uid=505(admin) gid=505(admin) groups=505(admin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
在现代的Red Hat Linux系统,创建用户账号时候,会限制uid
和gid
为1000
及以上。而以前的Red Hat Linux系统,则uid
和gid
从500
开始。由于历史原因,所以容器中admin
用户的uid
和gid
都采用了505
。
操作系统限制uid
和gid
范围是在/etc/login.defs
中定义的
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000
UID_MAX 60000
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
GID_MAX 60000
将上述UID_MIN
和GID_MIN
更改成500
之后,就可以重新创建uid
和gid
为505
的admin
账号
groupadd -g 505 admin
useradd -u 505 -g 505 -G root,wheel -d /home/admin -m admin
然后再使用ssh远程登陆admin
账号,则恢复正常的goups
$ ssh [email protected]
[admin@devstack ~]$ id
uid=505(admin) gid=505(admin) groups=505(admin),0(root),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023