如何在Dockerfile中复制父目录内容至Docker容器的/app目录?
问题解决:Docker复制父目录内容到容器
核心原因
Docker构建镜像时存在构建上下文限制:执行docker build命令时指定的目录就是上下文,Docker只能访问这个目录及子目录的内容,无法访问上下文之外的文件(比如上级目录)。你的Dockerfile放在.devcontainer里,若直接在此目录执行构建,上下文是.devcontainer,../指向的project目录不在上下文范围内,因此COPY ../ /app会失效。
解决方案
步骤1:调整构建命令的执行位置
切换到project目录(.devcontainer的父目录),执行构建命令并指定Dockerfile路径:
docker build -t your-image-name -f .devcontainer/Dockerfile .
命令末尾的.表示构建上下文为当前的project目录,-f参数指定Dockerfile位于.devcontainer目录中。
步骤2:修改Dockerfile中的COPY指令
由于构建上下文已改为project目录,直接复制当前上下文的所有内容到容器/app即可,将原COPY ../ /app替换为:
COPY . /app
完整修改后的Dockerfile
FROM python:3.9.10-alpine3.14 WORKDIR /app RUN pip install --upgrade pip # 注:WORKDIR已设置为/app,会自动创建不存在的目录,无需额外执行mkdir RUN apk add build-base # 上下文为project目录,需指定requirements.txt的完整相对路径 COPY .devcontainer/requirements.txt /tmp/ # 复制project目录下所有内容到容器/app COPY . /app RUN pip3 install -r /tmp/requirements.txt ENTRYPOINT ["tail", "-f", "/dev/null"]
额外说明
- 若使用docker-compose构建,需调整
build配置,明确指定上下文和Dockerfile路径:
services: your-service: build: context: . # 上下文为project目录 dockerfile: .devcontainer/Dockerfile # 其他服务配置...
内容的提问来源于stack exchange,提问作者Andreas Alamanos
相关产品推荐
相关产品推荐

