Loading

Docker -v | volume 挂载宿主机目录导致容器内文件被覆盖问题

当我们使用docker run -v /host/something:/container/something尝试挂载默写目录到容器内时,期待的效果是容器内的文件和本地目录的文件相互映射,但实际效果宿主机目录会直接覆盖掉容器内的目录,但容器内文件并非被删除,这个后面会讨论到。

本文观点主要参看如下文章,因为国内少有讨论volume挂载覆盖问题,故简翻记录核心要义。

容器内的文件被删除了吗?

都按时否定的,容器的镜像自带的文件并没有被重写覆盖,而是被隐藏了,原理类似于linux mount的挂载,所以与其说是覆盖,不如说是目录挂载会掩盖。

目前解决办法

使用docker volume create创建,这种方法创建的是数据卷,而通过在创建容器时将主机本地任意路径挂载到容器作为数据卷的方式称为绑定数据卷
当我们需要将容器内文件映射,或者说是同步至宿主机的的文件夹里的时候,就可以通过数据卷的方式,具体指令如下:


docker run -it --name somename -v volume-name:/container-src anyimage /bin/bash

#数据卷的两种方式
具名挂载: 指的是volume-name,主要不要添加`/`路径符,添加路径符则表示使用的是上文中绑定数据卷的方式,使用绑定数据卷是,宿主机路径必须是绝对路径.
匿名挂载: 指的是-v 后面只有/container-src,这样容器目标路径会挂载在随机名的volume上.

# 可以查看具体的volumen列表
docker volume ls
posted @ 2021-12-08 12:55  二柒的博客  阅读(9152)  评论(0编辑  收藏  举报