能否将Docker镜像中的目录挂载至另一个容器?
Docker是否支持直接挂载另一个镜像的目录到运行中的容器?
Docker原生不支持你描述的这种通过docker run --mount type=xxx,image=imageX,subdir=/somedir,dst=/mnt-here直接挂载另一个镜像子目录的操作。原因很简单:镜像是由只读的文件系统分层组成的,它本身不是可被挂载的存储源,--mount参数的type选项(比如bind、volume、tmpfs等)都没有支持直接引用镜像作为数据源的类型。
你可以用以下两种替代方案实现类似效果:
临时容器导出目录后挂载
先把目标镜像里的目录导出到本地,再通过bind mount挂载到运行的容器中:# 创建临时容器承载imageX的文件系统 docker create --name temp-export imageX # 把imageX里的/somedir复制到本地目录 docker cp temp-export:/somedir ./local-somedir # 删除临时容器 docker rm temp-export # 运行imageY时挂载本地目录到容器内的/mnt-here docker run --mount type=bind,source="$(pwd)/local-somedir",target=/mnt-here imageY使用数据卷容器挂载
创建一个基于imageX的数据卷容器,把目标目录关联到数据卷,再让运行的imageY容器共享这个数据卷:# 创建一个仅用于提供数据的容器(不会实际运行) docker create --name imageX-data imageX /bin/true # 运行imageY时挂载数据卷容器里的/somedir到/mnt-here docker run --volumes-from imageX-data:/mnt-here imageY
这两种方案都能在容器创建阶段完成数据的挂载,适配你的业务场景。
内容的提问来源于stack exchange,提问作者hbogert
相关产品推荐
相关产品推荐

