Docker Compose生产部署报错COPY failed: forbidden path outside the build context求助
错误原因
Dockerfile 中 COPY 指令的相对路径是基于 Compose 配置里指定的**构建上下文(build context)**计算,而非 Dockerfile 自身的存放路径。
你为 web 服务指定的构建上下文是 server 目录(配置中 context: .,默认对应执行 docker-compose 命令的当前目录,也就是 docker-compose.dev.yml 所在的 server 目录),Docker 构建时仅允许访问该上下文范围内的文件,你在 Dockerfile 中写 ../../ 前缀的路径相当于尝试跳转到 server 目录的上级两层,超出了上下文范围,因此触发报错。
另外你贴出的 Compose 配置存在缩进错误:dockerfile 字段应该归属于 build 配置下,和 context 同级缩进,否则 Compose 会识别不到指定的 Dockerfile 路径,也是潜在诱因。
修复步骤
- 调整
server/docker/api/Dockerfile.dev中所有带../../前缀的COPY路径,直接写相对于server目录的路径即可:# 调整前:COPY ../../data_acquisition_survey_api/ . COPY ./data_acquisition_survey_api/ . # 调整前:COPY ../../manage.py . COPY ./manage.py . # 调整前:COPY ../../docker/api/requirements.txt . COPY ./docker/api/requirements.txt . # 调整前:COPY ../../docker/api/entrypoint.sh $APP_HOME COPY ./docker/api/entrypoint.sh $APP_HOME - 修正
docker-compose.dev.yml中 web 服务的缩进错误:web: build: context: . dockerfile: docker/api/Dockerfile.dev # 此处需缩进到build配置块内 - 确认执行
docker-compose命令的工作目录为server目录(也就是docker-compose.dev.yml所在目录),执行以下命令清理缓存重新构建即可:docker-compose -f docker-compose.dev.yml build --no-cache docker-compose -f docker-compose.dev.yml up
内容的提问来源于stack exchange,提问作者Thierry B
相关产品推荐
相关产品推荐

