容器无法找到卷内文件:‘No such file or directory’问题咨询
问题原因解析
这是Docker VOLUME指令的特性导致的:
- 当Dockerfile中执行
VOLUME /myVol时,构建阶段就会立即创建一个临时匿名卷并挂载到/myVol路径。 - 后续的
RUN echo "Hello World" > /myVol/message.txt操作,实际是把文件写入了这个临时挂载的卷中,而非镜像的底层文件系统。 - 镜像构建完成后,这个临时卷会被直接丢弃,镜像内的
/myVol目录本身是空的。 - 启动容器时,Docker会重新创建一个全新的卷(匿名卷或你指定的卷)挂载到
/myVol,自然找不到之前RUN生成的文件。
修正方案示例
如果希望容器启动时能看到message.txt,可以调整指令顺序,先在镜像中生成文件,再声明卷:
FROM ubuntu:latest RUN echo "Hello World" > /myVol/message.txt VOLUME /myVol CMD cat /myVol/message.txt
这种情况下,镜像构建时/myVol的文件会被保存在镜像文件系统中,第一次启动容器时,Docker会自动将镜像里/myVol的内容复制到新创建的卷中,就能正常读取文件了。
内容的提问来源于stack exchange,提问作者Shyam Gupta
相关产品推荐
相关产品推荐

