执行docker-compose build时COPY命令失败:无法复制到非目录
Docker构建报错:cannot copy to non-directory
问题场景
执行以下Docker Compose构建命令时触发错误:
docker-compose -f docker-compose.yml build
Dockerfile配置
FROM ubuntu:20.04x RUN apt update && apt upgrade -y RUN apt-get update RUN apt install -y python3.8-dev python3-pip git-core COPY ./ ./ ARG DEBIAN_FRONTEND=noninteractive RUN python3 -m pip install setuptools==57.5.0 RUN cd ./tools && python3 install_env.py ENV PYTHONPATH ./tools/src/ RUN cd config && pip3 install -r requirements.txt
docker-compose.yml配置
version: '3' services: helix-build: build: context: $WORKSPACE dockerfile: ./config/Dockerfile image: build_sanity_check_image
报错信息
[5/8] COPY ./ ./ #9 ERROR: cannot copy to non-directory: /var/lib/docker/overlay2/gafhkgbr6f6ixasuq4dk5cowk/merged/lib [5/8] COPY ./ ./: failed to solve: cannot copy to non-directory: /var/lib/docker/overlay2/gafhkgbr6f6ixasuq4dk5cowk/merged/lib
关键现象
仓库中新添加了lib目录,移除或重命名该目录后,构建即可正常完成。
问题原因
Ubuntu 20.04系统镜像的根目录下,原本就存在一个名为lib的符号链接文件(而非目录),它是指向系统库目录lib/x86_64-linux-gnu的关键系统文件。当你执行COPY ./ ./时,Docker会尝试把本地仓库里的lib目录复制到容器根目录,但目标路径已经被非目录文件占用,复制操作因路径冲突触发"cannot copy to non-directory"错误。
解决方法
- 重命名本地仓库的
lib目录,比如改为app_lib这类不与系统路径冲突的名称。 - 修改Dockerfile的
COPY指令,不要直接复制整个上下文到根目录,而是指定需要复制的具体文件/目录,示例:COPY ./tools/ ./tools/ COPY ./config/ ./config/ # 按需添加其他需要复制的内容 - 将本地
lib目录复制到容器内的非系统路径下,示例:COPY ./lib/ ./app/lib/
内容的提问来源于stack exchange,提问作者MuthuKumar
相关产品推荐
相关产品推荐

