Docker如何识别run命令-v选项指向主机目录还是Docker卷?
Docker 如何区分
-v 参数中的主机目录和卷名称? Docker 是通过以下逻辑来区分 -v a:b 里的参数 a 是主机目录还是卷名称的:
- 优先判断是否为绝对路径:如果
a是绝对路径格式(比如 Linux/macOS 下的/home/xxx/data,Windows 下的C:\xxx\data或者/run/desktop/mnt/host/c/xxx),Docker 会直接将其当作主机上的目录处理。如果这个目录在主机上不存在,默认会自动创建(除非启动容器时加了--read-only等限制参数)。 - 非绝对路径则匹配卷名称:如果
a不是绝对路径(比如my-app-data),Docker 会先检查本地是否存在同名的 Docker 卷:- 若存在同名卷,直接挂载该卷到容器内的
b路径; - 若不存在,Docker 会自动创建一个同名的新卷,再完成挂载。
- 若存在同名卷,直接挂载该卷到容器内的
举两个实际例子:
- 挂载主机目录:
docker run -d -v /opt/my-app/logs:/var/log/nginx nginx,这里/opt/my-app/logs是主机上的绝对路径,Docker 会直接映射这个目录到容器的/var/log/nginx。 - 挂载 Docker 卷:
docker run -d -v nginx-logs:/var/log/nginx nginx,这里nginx-logs不是绝对路径,Docker 会先查找本地是否有这个卷,没有的话就自动创建,再挂载到容器目录。
内容的提问来源于stack exchange,提问作者user1079505
相关产品推荐
相关产品推荐

