docker使用
使用docker的user-remap功能
user-remap功能是将宿主机上的指定用户,映射到docker容器内部的root用户。
如果是要root映射到root,则不需要使用user-remap功能。只要没有开启user-remap功能,docker启动的容器在宿主机上本身就有root权限,只不过这个权限不全。具体有哪些权限,可以进入容器中查看
capsh --print
在宿主机上创建一个普通用户
使用root用户进行以下操作
groupadd -g 1000 dockeruser
useradd -u 10000 -g dockeruser -d /home/dockeruser -m dockeruser
解释
groupadd 中的-g是指定group id为10000。 groupadd命令中的dockeruser为组名。
useradd中,-u指定uer id为100000。-d为指定该用户的根目录。-m表示创建该目录。dockeruser为用户名。-g dockeruser表示,指定创建的该用户属于dockeruser组,该dockeruser组必须存在,否则会报错,所以必须先执行groupadd命令。
在docker启动过程中,要求组名与用户名一致。
查看宿主机上的所有用户信息
列出 Linux 系统上所有用户的 3 种方法——Linux中国-知乎
方法一:
compgen -u
compgen -g
解释
-u是宿主机的所有用户
-g是宿主机的所有组
方法二:
cat /etc/passwd
确保宿主机上的subuid和subgid中有信息
[root@centos centos-usr]# cat /etc/subuid
dockeruser:100000:65536
[root@centos centos-usr]# cat /etc/subgid
dockeruser:100000:65536
检查宿主机上是否启用了命名空间隔离
理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境——weixin_33851604-CSDN
[root@node1 1573]# uname -a
Linux node1.exampleos.com 3.10.0-514.2.2.el7.x86_64 #1 SMP Tue Dec 6 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@node1 1573]# cat /boot/config-3.10.0-514.2.2.el7.x86_64 | grep CONFIG_USER_NS
CONFIG_USER_NS=y
如果是 「y」,则启用了,否则未启用。同样地,可以查看其它 namespace:
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
如果是centos7,则需要使用以下方法:
参考链接1
参考链接2
修改daemon.json文件
centos为/etc/docker/daemon.json
#vim /etc/docker/daemon.json
{
"registry-mirrors":["https://registry.docker-cn.com","https://l10nt4hq.mirror.aliyuncs.com"],
"userns-remap": "dockeruser"
}
解释
userns-remap标签中的dockeruser表示要将docker容器中的root用户映射为宿主机上的指定的用户名和组名。是宿主机侧的用户名和组名。
重启docker
systemctl stop docker
systemctl daemon-reload
systemctl start docker
查看docker工作目录的权限归属
centos中的docker的工作目录是/var/lib/docker
[root@centos centos-usr]# ls -ltr /var/lib/docker/
总用量 24
drwx------. 4 root root 32 8月 12 11:13 plugins
drwx------. 3 root root 22 8月 12 11:13 image
drwx------. 2 root root 6 8月 12 11:13 trust
drwxr-x---. 3 root root 19 8月 12 11:13 network
drwx------. 2 root root 6 8月 12 11:13 swarm
drwx--x--x. 4 root root 120 8月 12 11:13 buildkit
drwx------. 2 root root 6 9月 27 16:55 runtimes
drwx-----x. 3 root root 122 9月 27 16:55 volumes
-rw-r--r--. 1 root root 5120 9月 27 16:59 linkgraph.db
drwx------. 2 root root 6 9月 28 11:52 tmp
drwx-----x. 56 root root 8192 9月 28 11:53 overlay2
drwx-----x. 10 root root 4096 9月 28 11:53 containers
drwx-----x. 11 root root 135 9月 28 15:13 100000.100000
可以看到,新用户10000.10000的docker工作目录的所有权归属于root用户,并不归属于新用户dockeruser。所以需要将用户所有权改为dockeruser
修改新用户的工作目录所有权
chown -R dockeruser:dockeruser /var/lib/docker/100000.100000
解释
chown命令修改文件的所有者。修改所属的用户和所属的组。
命令中,前一个dockeruser是将要修改为的所属用户,后一个dockeruser是将要修改为的所属组。
-R是把目录中的所有文件的所有者都进行更改。