Docker虽无内置多用户系统,但可通过用户命名空间、cgroups资源限制、自定义bridge网络及独立volume/env-file实现完全隔离。启用userns-remap确保容器root映射宿主机普通UID;通过--cpus/--memory限制资源;为各用户创建互不连通的私有子网;使用专属命名卷和.env文件分离数据与配置。

Docker 本身不内置“多用户账户系统”,但通过组合命名空间隔离、资源限制、网络划分和权限控制,完全可以构建出安全、互不干扰的多用户运行环境。关键不是装 Docker,而是装完后怎么配。
核心目标:让不同用户(或团队)启动的容器彼此看不见、抢不到资源、连不上对方服务、也改不了对方数据。
✅ 用户级隔离:靠 User Namespace + daemon 配置
Docker 默认所有容器以 root 身份运行,这在多用户共享宿主机时风险极高。启用用户命名空间映射,能让容器内 root 实际对应宿主机上的普通 UID,从根本上防止越权。
- 修改 Docker daemon 配置
/etc/docker/daemon.json:{ "userns-remap": "default", "default-ulimits": { "nofile": { "Name": "nofile", "Hard": 65536, "Soft": 65536 } } } - 重启生效:
sudo systemctl restart docker
✅ 效果:
- 每个用户启动的容器进程,在宿主机上归属独立 UID/GID(如
dockremap:10000) - 容器无法挂载宿主机敏感路径(如
/proc,/sys) - 即使容器被攻破,也无法提权影响其他用户或宿主机
? 注意:启用后,绑定挂载(
-v)需确保宿主机目录属主匹配 remap 用户,否则权限拒绝。建议统一用 named volume 或提前chown -R 10000:10000 /path。
✅ 资源隔离:用 cgroups 限定 CPU、内存、IO
避免某个用户跑满资源拖垮其他人。可在 docker run 或 docker-compose.yml 中硬性约束:
services:
user-a-app:
image: nginx
deploy:
resources:
limits:
cpus: '1.5'
memory: 1g
reservations:
cpus: '0.5'
memory: 512m或者命令行启动时指定:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
docker run -d \ --cpus=1.2 \ --memory=2g \ --memory-swap=2g \ --pids-limit=100 \ --name user_b_service nginx
✅ 效果:
- CPU 时间片、内存上限被强制限制
-
--pids-limit防止 fork bomb 类攻击 - 不同用户的容器不会因资源争抢而抖动或 OOM
✅ 网络隔离:为每个用户建专属 bridge 网络
默认 bridge 网络下,所有容器可互相 ping 通(除非显式禁用),极易造成横向渗透。
- 为用户 A 创建私有网络:
docker network create --driver bridge --subnet=192.168.100.0/24 user_a_net
- 启动容器时指定:
docker run -d --network=user_a_net --name app-a nginx
- 用户 B 同理创建
user_b_net,子网不能重叠(如192.168.101.0/24)
✅ 效果:
-
user_a_net和user_b_net完全不通(无路由、无 DNS 解析) - 容器只能访问自己网络内的服务,连
docker0也不互通 - 可配合
iptables或nftables做额外出入站过滤(如只放行 80/443)
✅ 数据与配置隔离:用 volume + env-file 分开管理
-
数据隔离:每个用户使用独立命名卷,不复用
host path:docker volume create user_a_data docker run -v user_a_data:/app/data nginx
-
配置隔离:用
.env文件分用户加载:# user-a.env DB_HOST=db-a REDIS_PORT=6379
user-b.env
DB_HOST=db-b
REDIS_PORT=6380
docker compose --env-file user-a.env up -d
✅ 效果: - 数据落盘位置物理分离,删除 volume 不影响他人 - 环境变量按用户定制,避免配置污染(比如数据库地址写错串库) --- 不复杂但容易忽略。真正落地时,建议把上述四步打包成一个初始化脚本(含 network/volume/daemon 配置检查),新用户注册后一键生成专属环境。

















