我只是想将当前目录的所有内容复制到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
空目录,因此无需担心冲突。