MCP Server Docker 隔离实践:文件、网络、Token 和权限边界
2026/6/26 15:47:40 网站建设 项目流程

本文记录一套 MCP Server 接入团队 AI 编程工具前的 Docker 隔离检查。目标不是讲 MCP 协议入门,而是避免 MCP Server 直接继承主机权限,导致文件、网络、Token 和镜像来源不可控。

1. 适用场景

假设团队准备接入这些 MCP Server:

  • Git / 文件系统 Server。
  • 数据库查询 Server。
  • 浏览器自动化 Server。
  • 内部 API 查询 Server。

如果这些 Server 直接跑在开发机或服务器主机上,默认可能看到主机文件、环境变量、网络和本地凭据。上线前建议先容器化,再开放给团队使用。

2. 先做镜像预检

先确认基础运行时能稳定拉取:

dockerpull docker.1ms.run/node:22-alpinedockerpull docker.1ms.run/python:3.12-slimdockerpull docker.1ms.run/redis:7

这一步用于排除镜像来源问题。MCP Server 后续如果启动失败,至少可以先确认不是基础镜像拉取导致。

3. 文件类 MCP Server:默认无网络

文件类 Server 不一定需要访问外网,建议先禁用网络,只挂载明确目录:

services:mcp-files:image:docker.1ms.run/node:22-alpineuser:"1000:1000"working_dir:/workspaceread_only:truenetwork_mode:"none"cap_drop:-ALLsecurity_opt:-no-new-privileges:truevolumes:-./server:/app:ro-./workspace:/workspace:ro-./mcp-tmp:/tmp:rwcommand:["node","/app/server.js"]

注意点:

  • 不要挂载整个$HOME
  • 不要把~/.ssh、云厂商凭据、浏览器 profile 放进去。
  • workspace优先只读,确实需要写入时再拆出单独目录。

4. 数据库类 MCP Server:只进指定网络

数据库类 Server 不需要访问所有内网,只需要访问数据库所在网络:

networks:mcp-db-net:internal:trueservices:mcp-db:image:docker.1ms.run/python:3.12-slimuser:"1000:1000"read_only:truecap_drop:-ALLsecurity_opt:-no-new-privileges:truenetworks:-mcp-db-netvolumes:-./server:/app:roenv_file:-./secrets/mcp-db.envcommand:["python","/app/server.py"]

secrets/mcp-db.env里不要放全库管理员账号,优先使用只读账号、最小库表权限和短期 Token。

5. 检查表

检查项命令或动作
镜像来源固定 image、tag,必要时记录 digest
容器用户检查是否非 root
文件系统read_only: true,只挂必要目录
网络出口文件类默认network_mode: none
Linux 权限cap_drop: [ALL]
提权限制no-new-privileges:true
凭据env 文件权限收紧,不进镜像
日志不打印 Token、Cookie、连接串

6. 结论

MCP Server 接入 AI 工具前,先把边界讲清楚。Docker 沙箱不能代替完整安全治理,但它能把最容易失控的目录、网络、权限和镜像来源先收住。镜像拉取、运行时版本和依赖组件可以用毫秒镜像做预检;真正的安全边界,还要靠最小权限、网络策略、secret 管理和审计一起完成。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询