Docker,路径,json-找不到文件:找不到

Docker, paths, json-file not found: not found

问题是什么?每次发生这种情况...

 => CACHED [2/5] WORKDIR ../app                                                                                                                               0.0s 
 => ERROR [3/5] COPY package.json .                                                                                                                           0.0s 
------
 > [3/5] COPY package.json .:
------
failed to compute cache key: "/package.json" not found: not found

我不明白我做错了什么。

Docker 文件:

FROM node
WORKDIR /app
COPY ../app/package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

我在 powershell 中使用 docker build .

您正在更新 WORKDIR,如文档所述:

WORKDIR 指令为任何 运行、CMD、ENTRYPOINT、COPY 和 ADD 指令设置工作目录它在 Dockerfile 中。

我想,说的就是

COPY package.json

应该够了。

您不能将上下文(您所在的当前目录)之外的文件包含到 docker 图像中

因此您可以将主机上的 app 目录移动到 Dockerfile

的文件夹

您可以执行以下操作

docker build -f docker\Dockerfile .

父目录 中(即包含 dockerapp 文件夹的目录)。并按如下方式调整您的 Dockerfile

COPY app/package.json .

不幸的是,Dockerfile 无法访问父目录。但是,您可以使用 docker build -f path/to/dockerfile . 从父目录构建 dockerfile。请记住,您的 COPY 是相对于您 运行 和 docker build 所在的目录的,该目录是父目录。

另外,WORKDIR uses/creates 一个目录 在容器内 WORKDIR /app 在容器的根目录创建了 'app' 文件夹,所以 /../app 是不必要的(尽管它达到了相同的结果)。

您不能引用 docker 文件中的父目录,原因在 docker 文档中解释:

The path must be inside the context of the build; you cannot ADD ../something /something, because the first step of a docker build is to send the context directory (and subdirectories) to the docker daemon.

Source

最简单的解决方法是:

docker build -t <some tag> -f <dir/dir/Dockerfile> .

您可以添加的另一件事是构建上下文。您可以配置上下文,而不是将当前目录中的所有文件复制到 Docker 守护程序,例如

docker build -t <some tag> -f ./dir/to/Dockerfile ./dir/to/build/context