You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器Shell可见挂载卷但Dockerfile中无法访问的问题

问题解答

核心原因是Docker构建阶段和运行阶段完全独立,挂载卷仅在容器运行时生效,构建阶段无法访问运行时的挂载内容。

1. 构建阶段(docker build)的行为

当你执行docker build时,Docker基于Dockerfile的指令逐层构建镜像:

  • RUN ls /usr/source是在构建镜像的过程中执行的命令,此时还未启动容器,docker run -v指定的挂载卷还不存在(挂载操作是容器启动时才会执行的)。
  • 镜像本身默认没有/usr/source目录,也未通过COPY/ADD指令把宿主机的source目录复制到镜像里,所以构建时执行ls会报错找不到目录。

2. 运行阶段(docker run)的行为

当你执行docker run -v $(pwd)/source:/usr/source启动容器时:

  • Docker先基于构建好的镜像创建容器,再执行挂载操作,把宿主机的source目录绑定到容器内的/usr/source路径。
  • CMD ["/bin/bash"]是容器启动后才执行的指令,此时挂载已经完成,所以进入容器的Shell后能正常看到/usr/source下的file.txt。

补充说明

如果需要在构建阶段访问source目录的内容,不要依赖运行时挂载,而是用COPY指令把文件复制到镜像中:

FROM ubuntu:jammy as prereqs
COPY source /usr/source
RUN ls /usr/source  # 此时构建阶段就能看到目录内容了

内容的提问来源于stack exchange,提问作者cydonian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:55:19