解决 Docker 数据卷挂载的文件权限问题
本文对 Docker 数据挂载容易产生的各种问题进行分析,应用几种常见解决方案,抽丝剥茧,提出最佳实践。本文中的样例命令全部可以运行复现。
1. 初探:Docker volume 绑定挂载导致的问题
Docker 提供了数据卷绑定挂载的机制(volume bind mounts)来将主机上的文件 (file) 或者目录 (directory) 挂载进容器 (container)。也就是 docker run
命令中熟知的 -v
参数。根据 Docker 官方文档,绑定挂载一般适合于三种场景:
- 共享主机 配置文件。譬如将主机的 DNS 配置文件
/etc/resolv.conf
挂载到容器里省去配置。 - 共享项目 源代码 和 构建产物。譬如将 maven 项目的 target 目录挂载到容器内。
- 当主机的特定目录结构和容器内需要的目录结构完全一致的时候。
但是实际使用时,会遇到如下文件权限问题: