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

如何在Docker容器间共享只读(RO)数据且无需复制?

解决Docker容器间只读共享大体积数据(避免复制)

最优方案:使用数据容器共享数据

无需复制80GB数据,直接复用data-image镜像内的/data目录:

  • 创建一个仅用于提供数据的容器(无需启动,创建即可):

    docker create --name data-provider data-image
    

    此操作仅基于镜像生成容器元数据,不会触发任何数据复制。

  • 启动runner-image容器时,挂载该数据容器的/data目录并设置为只读:

    docker run --volumes-from data-provider:ro runner-image ls /data
    

    :ro标记确保runner-image只能读取数据,无法修改原始内容。

备选方案:直接挂载镜像文件系统(进阶)

若不想创建额外容器,可直接挂载data-image的文件系统路径,前提是知晓镜像存储的宿主机路径:

  • 获取data-image的合并层目录:

    DATA_IMAGE_MERGED_DIR=$(docker inspect data-image -f '{{ .GraphDriver.Data.MergedDir }}')
    
  • 通过bind mount挂载/data目录到runner-image容器:

    docker run --mount type=bind,source=${DATA_IMAGE_MERGED_DIR}/data,target=/data,readonly runner-image ls /data
    

    注意:该方法依赖Docker存储驱动(如overlay2),不同环境路径可能有差异,可移植性较差。

原方案触发数据复制的原因

你之前使用docker run --volume data-volume:/data:ro data-image时,Docker会自动将容器内/data的内容复制到新创建的data-volume中——这是Docker初始化named volume的默认行为,目的是填充volume内容。而上述方案绕过了这个初始化步骤,直接复用镜像中的原始数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:45:35