关于Docker构建时创建的/usr/src/app文件夹位置的疑问
Docker WORKDIR目录位置疑问解答
问题描述
我使用如下实验性Dockerfile:
FROM python:3.11 WORKDIR /usr/src/app RUN pwd RUN ls -l COPY requirements.txt ./ RUN ls -l RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD [ "python", "-u", "subscriber.py" ]
使用--progress=plain和--no-cache参数执行docker build时,构建过程中可看到pwd命令输出为/usr/src/app,也能看到该文件夹的内容:复制requirements.txt前文件夹为空,复制后列表中显示该文件。
但在我的操作系统文件系统中,导航到/usr/src路径下却找不到名为app的文件夹。请问Docker是在哪里创建该文件夹的?还是构建过程中创建后又删除了?
我是Docker新手,我的Linux版本为Ubuntu 22.04.2 LTS。
补充说明:我了解到WORKDIR是在容器镜像内创建的,但连接到容器shell后,我也找不到该目录。
解答
Docker镜像与宿主机文件系统完全隔离
WORKDIR /usr/src/app创建的目录是在Docker镜像的文件系统内部,和你Ubuntu宿主机的/usr/src没有任何关联,所以你在宿主机里找不到这个目录是正常的——它根本就不在宿主机的磁盘路径里。为什么进入容器shell也找不到?
大概率是这两个原因:- 没有基于自己构建的镜像启动容器:如果构建完镜像后,你用的是
python:3.11这类基础镜像启动容器,自然找不到这个目录。必须用你构建好的镜像启动,比如执行docker run -it <你的镜像ID或名称> /bin/bash。 - 启动容器时修改了工作目录或挂载了卷:如果启动容器时加了
-w参数指定了其他工作目录,或者用卷挂载覆盖了/usr/src/app路径,也会导致看不到这个目录。
- 没有基于自己构建的镜像启动容器:如果构建完镜像后,你用的是
构建过程中的目录不会被删除
构建时创建的/usr/src/app会被保留在镜像的分层文件系统中,只要镜像存在,这个目录就一直存在。你可以执行docker inspect <镜像ID>查看镜像的WorkingDir字段,确认这个目录确实是镜像的默认工作目录。
内容的提问来源于stack exchange,提问作者AllSolutions
相关产品推荐
相关产品推荐

