复制到 WORKDIR 时出现“错误:无法复制到非目录”?

复制到 WORKDIR 时出现“错误:无法复制到非目录”?

我只是想将当前目录的所有内容复制到docker镜像中。为什么工作目录不允许作为目的地?

from ubuntu:20.04
WORKDIR .
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN echo "HOME is $HOME"
COPY  ./setup-python.sh ./
COPY  ./* ./

错误:无法复制到非目录:> /var/lib/docker/overlay2/cytt3i5m23b6ce9iciljwb3c7/merged/lib

注意:我也尝试过不使用反斜杠,但结果还是一样的错误。

COPY  ./setup-python.sh .
COPY  ./* .

答案1

经过反复尝试,似乎.不是一个有效的WORKDIR?我只好自己编了一个:

WORKDIR=/usr/build   # totally arbitrary

至少现在建设正在进展中。

更新 正确的COPY命令现在非常简单

COPY  . .

答案2

当您尝试将源目录复制到目标目录以外的其他目录时,可能会出现此错误。

WORKDIR .

通常会将您置于 Linux 文件系统的根目录,即/。例如,使用

ln -snf /usr/share/zoneinfo/$TZ /etc/localtime

您已将其创建/etc/localtime为符号链接。即和./etc/localtime/etc/localtime如果您的本地目录(.在构建主机上)中有一个目录./etc/localtime/,那么您将收到此错误。

当然,也可能是其他原因。您的基础镜像是ubuntu:20.04,其中有/bin//lib//sbin作为符号链接,因此如果您在其中有上述任何目录,.那么您将收到此错误。

通过设置,WORKDIR=/usr/build您已将 的含义更改.为目标。现在,/您不再将主机目录复制到 ,而是将其复制到/usr/build空目录,因此无需担心冲突。

相关内容