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

Docker COPY复制内容到WORKDIR时报错“ERROR: cannot copy to non-directory”的问题求助

Docker COPY复制内容到WORKDIR时报错“ERROR: cannot copy to non-directory”的问题求助

老兄,这个报错的根源其实很好理清,咱们一步步拆解:

错误原因

你把WORKDIR设成了.,在Ubuntu 20.04镜像里,默认工作目录就是根目录/,所以WORKDIR .其实还是指向/。当你用COPY ./* ./把本地目录的所有内容复制到/下时,本地目录里很可能存在和系统根目录下同名的文件(比如lib、bin这类),而镜像里的/lib、/bin都是系统目录,这时候Docker会尝试把本地的文件覆盖成系统目录,自然就触发了“不能复制到非目录”的错误——本质是文件和目录的类型冲突了。

另外,COPY ./* ./这种写法依赖shell展开,容易出现意想不到的匹配问题,不如用更稳妥的写法。

解决方案

最靠谱的做法是创建一个独立的工作目录,避免和系统目录冲突,修改后的Dockerfile如下:

from ubuntu:20.04

# 创建专属工作目录并设置为当前工作目录
WORKDIR /app

ENV TZ=America/Los_Angeles

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN echo "HOME is $HOME"

# 复制文件到/app目录下
COPY ./setup-python.sh .
# 用COPY . .替代COPY ./* ./,更简洁且能包含隐藏文件
COPY . .

这样所有本地内容都会被复制到/app这个独立目录里,完全不会干扰系统的根目录文件/目录,自然就不会报错了。

补充说明

不是WORKDIR不能作为目的地,而是你选的WORKDIR(根目录/)本身就有大量系统目录,和你本地的文件重名冲突了。只要换成一个自定义的、不存在的目录作为WORKDIR,就可以正常复制内容了。

备注:内容来源于stack exchange,提问作者WestCoastProjects

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:12:57