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
相关产品推荐
相关产品推荐

