COPY目标路径须为绝对路径或基于WORKDIR的相对路径,未设WORKDIR时必须以/开头;路径自动创建父目录;末尾斜杠影响目标解释:/dest/视为目录,/dest视为文件;多阶段构建中路径始终相对于当前阶段根文件系统。
COPY 指令的目标路径是镜像内的绝对路径,必须以 / 开头(除非使用相对路径配合 WORKDIR),且路径会自动创建父目录(Docker 20.10+ 支持)。
如果未设置 WORKDIR,目标路径必须以 / 开头,比如:
COPY app.py /app/app.py
这表示把宿主机的 app.py 复制到镜像根目录下的 /app/app.py。注意:/app 目录不存在时,Docker 会自动创建。
推荐先用 WORKDIR 设定工作目录,后续 COPY 就可用相对路径:
WORKDIR /app
COPY requirements.txt .
COPY . .
这里两个 . 都指代当前 WORKDIR(即 /app)。第一个 . 表示“复制到当前目录”,第二个 . 表示“把当前目录下所有文件复制进来”。
目标路径是否以 / 结尾,影响 Docker 对目标的解释方式:
/dest 是目录,复制为 /dest/file.txt;如果 /dest 不存在,Docker 创建目录并放入文件/dest 已存在且是目录,报错;如果 /dest 不存在或为文件,Docker 把 file.txt 写成 /dest 这个新文件(覆盖同名文件)COPY src ./dst —— ./dst 不合法,Docker 不识别当前目录的 . 作为目标前缀(除非前面有 WORKDIR)/opt/app 写成 /opt/app/(虽多数情况不影响,但语义不同,建议统一风格)