Docker构建时复制到/var/www的文件挂载命名卷后仍可见问题求助
问题原因
这是Docker命名卷(Named Volume)的默认初始化机制导致的,属于设计行为,和你的运行环境、构建流程无关。你之前的认知对应的是**绑定挂载(Bind Mount)**的行为,二者挂载逻辑有本质区别:
- 绑定挂载(挂载宿主机指定目录到容器内路径):宿主机目录的内容会直接覆盖容器内路径的内容,完全隐藏容器内原目录下的所有文件
- 命名卷(由Docker管理存储位置的卷):当你首次将空的命名卷挂载到容器内已经存在文件的路径时,Docker会自动将容器内该路径下的所有原有文件、目录、权限配置复制到空命名卷中,再将填充完成的卷挂载到容器对应路径,因此你看到的是已经被镜像内容初始化后的卷内容。
验证方法
你可以通过以下操作验证该逻辑:
- 停止并删除现有容器,执行
docker volume rm test-data删除已创建的命名卷 - 手动创建test-data卷,往卷内写入一个自定义文件
- 重新启动容器,此时你在容器内
/var/www路径下只会看到你手动写入的文件,不会看到镜像中自带的testfile1、testfile2,因为非空的命名卷不会触发Docker的初始化复制逻辑。
补充说明
命名卷的初始化操作仅会在卷为空、首次挂载到有内容的容器路径时执行一次,只要卷内已有内容,后续无论重启、重建容器,都不会再同步镜像内对应路径的更新。
内容的提问来源于stack exchange,提问作者Iruwen
相关产品推荐
相关产品推荐

