> ## Content Index
> Fetch the complete content index at: https://lucent.blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# Docker 用户映射
- URL: https://lucent.blog/dockeryong-hu-ying-she/
- Published: 2022-03-31T02:16:15.000Z
- Updated: 2026-08-21T00:49:57.000Z
- Author: Lucent
- Tags: Docker

目的：将系统用户映射到docker容器里，使其不再使用root权限

#### 一、修改daemon.json

添加userns-remap，如果你想指定特定用户可以把default修改为系统用户，如果为default就代表用户分配的权利交给default自动完成。

```shell
{
    "userns-remap": "default"
}

```

#### 二、刷新配置

```shell
systemctl daemon-reload && systemctl restart docker

```

#### 三、验证生效

此时系统会自动创建dockremap这个用户,uid:100000,gid:65536

```shell
[root@VM-0-15-centos ~]# cat /etc/subuid
 dockremap:100000:65536
[root@VM-0-15-centos ~]# cat /etc/subgid
 dockremap:100000:65536

```

#### 四、修改内核参数max\_user\_namespaces

默认这个参数的值为0，是不允许用用户名称空间的，现在我们给他开启起来，具体的值需要根据上面查到的uid而定

```shell
sysctl -w user.max_user_namespaces=uid

```

#### 五、可能遇到的问题

在RHEL 7.5版本，上面第二步在dockerd启动的时候会报错"Can't create ID mappings: %!v(MISSING): No subuid ranges found for user "dockremap""，查询之后判断应该是系统BUG，可以看看Redhat官网的Bug说明[Bug-1546870](https://bugzilla.redhat.com/show%5Fbug.cgi?id=1546870&ref=lucent.blog)，它会在系统中建立dockremap账号然后使用usermod -v参数来设置dockermap用户的ID范围，但是在Centos 7.5版本的usermod命里没有-v参数。这就意味着RHEL 7.5不支持动态添加subid。所以我们只能手动来做，不过据说其他发行版可以支持比如Ubantu或者Fedora。

使用下面命令手动设置

```shell
# uid根据情况而定
echo "dockremap:100000:65536" > /etc/subuid
echo "dockremap:100000:65536" > /etc/subgid

```

设置好之后再从第二步开始执行即可