这是我的 Dockerfile:
FROM node:20 AS node-stage
RUN npm install -g ts-node
#FROM python:3.11
FROM python:2.7
COPY --from=node-stage . .
它抛出以下错误:
=> ERROR [stage-1 2/2] COPY --from=node-stage . . 0.1s
------
> [stage-1 2/2] COPY --from=node-stage . .:
------
Dockerfile:6
--------------------
4 | #FROM python:3.11
5 | FROM python:2.7
6 | >>> COPY --from=node-stage . .
7 |
--------------------
ERROR: failed to solve: cannot replace to directory /var/lib/docker/overlay2/uv99gn6qcbue5nvqe07ebh8nb/merged/bin with file
使用 python3,代码运行良好。为什么我会出现这个错误?
我尝试添加 --no-cache 来构建命令,但没有帮助。
UPD:我将最后一个命令替换为
COPY --from=node-stage /usr/local/bin/ts-node /usr/local/bin/ts-node
根据 ChatGPT 的建议,它解决了问题。但我还是不明白为什么。
如果确实如此,那么使用
COPY --from=node-stage . .
,您将尝试从 node-stage
构建阶段复制所有内容,包括根目录和所有内容,所以难怪它会失败。如果您真的想拥有一切,那么根本不要使用构建阶段。
您指定的更新命令
COPY --from=node-stage /usr/local/bin/ts-node /usr/local/bin/ts-node
更加理智,因为它指定了要复制的单个文件夹。
有关多阶段构建的更多信息,请参阅 https://docs.docker.com/build/building/multi-stage/。