Docker挂载卷后容器目录为空且多出目录的问题咨询
问题分析与解决
错误原因
- VOLUME指令理解偏差:Dockerfile里的
VOLUME /scripts /test_scripts不是用来关联本地目录与容器目录的,它的作用是让Docker为容器创建两个独立的匿名卷,分别挂载到容器内的/scripts和/test_scripts。启动容器时这两个目录会被空的匿名卷覆盖,本地脚本自然无法显示。 - 挂载阶段混淆:你要的本地目录绑定挂载,是在容器启动阶段通过命令行参数指定的,不能在Dockerfile的镜像构建阶段用VOLUME实现。
修正方案
步骤1:简化Dockerfile(可选,更规范)
不需要提前创建目录或声明VOLUME,绑定挂载时Docker会自动生成容器内的目标目录:
FROM python:3
步骤2:启动容器时指定绑定挂载
在project目录下执行命令,把本地scripts目录绑定到容器内的/test_scripts:
docker run -v $(pwd)/scripts:/test_scripts -it <你的镜像名称> /bin/bash
Windows PowerShell环境下替换为:
docker run -v ${PWD}/scripts:/test_scripts -it <你的镜像名称> /bin/bash
补充说明
- 如果仍想在Dockerfile里标记
/test_scripts为默认卷挂载点,可保留VOLUME /test_scripts,但启动容器时依然要通过-v指定本地目录,否则Docker还是会用空的匿名卷。 - 镜像构建过程与宿主环境无关,不要试图在Dockerfile里绑定本地目录,这类路径在构建阶段没有实际意义。
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

