You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Root受限的Docker镜像防容器内容查看与复制?

可行,以下是具体实现方案

一、镜像构建阶段加固

  • 以非root用户运行:构建时创建专属普通用户,切换后再打包运行环境,彻底避免root权限带来的越权风险。Dockerfile示例:
    # 多阶段构建,仅保留运行时文件
    FROM golang:1.21 as builder
    WORKDIR /app
    COPY . .
    RUN go build -o app .
    
    FROM alpine:3.18
    RUN adduser -D appuser
    USER appuser
    COPY --from=builder /app/app /usr/local/bin/
    CMD ["app"]
    
  • 最小化镜像内容:用多阶段构建剔除构建工具、源码、临时文件,只保留运行必需的二进制和依赖,减少可被利用的入口。
  • 严格设置文件权限:核心二进制和敏感文件设为仅当前用户可读可执行,其他用户无任何权限。比如在Dockerfile中添加:
    RUN chmod 500 /usr/local/bin/app
    

二、容器运行阶段限制

  • 禁用容器交互与执行权限:启动容器时禁止exec、attach操作,同时关闭TTY和交互模式:
    docker run -d --interactive=false --tty=false --security-opt=no-new-privileges your-image
    
    配合seccomp profile过滤execve系统调用,彻底阻止容器内执行新命令。自定义seccomp配置示例(拒绝execve):
    {
      "defaultAction": "SCMP_ACT_ALLOW",
      "syscalls": [
        {
          "name": "execve",
          "action": "SCMP_ACT_ERRNO"
        }
      ]
    }
    
    启动时指定该profile:
    docker run -d --security-opt seccomp=./block-exec.json your-image
    
  • 使用只读文件系统:容器启动时挂载为只读,仅把必要的临时目录设为可写,防止用户修改或复制文件:
    docker run -d --read-only -v /tmp:/tmp:rw your-image
    
  • 移除所有不必要的Linux能力:启动时丢弃所有内核能力,仅保留程序运行必需的(比如网络相关的NET_ADMIN):
    docker run -d --cap-drop all --cap-add NET_ADMIN your-image
    

三、额外加固手段

  • 使用沙箱化运行时:用gVisor或Kata Containers替代默认runc,提供更强的硬件级隔离,阻止用户突破容器边界读取宿主机或镜像内容。
  • 禁止数据导出操作:如果客户通过Docker管理平台操作,限制docker cp、docker save、docker export等命令的权限,避免镜像或容器内容被导出。

内容的提问来源于stack exchange,提问作者Niranjan Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 08:17:15