如何为 docker 文件正确复制 requirements.txt

how to correctly copy requirements.txt for docker file

这是我当前的文件夹结构:

我在 FinTechExplained_Python_Docker 文件夹中。我的 Dockerfile 如下所示:

FROM python:3.8-slim-buster

WORKDIR /src

COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "main.py"]

然而,当我运行这个命令 docker build --tag FinTechExplained_Python_Docker .

我收到这个错误

ERROR [3/5] COPY requirements.txt requirements.txt                    0.0s
------
 > [3/5] COPY requirements.txt requirements.txt:
------
failed to compute cache key: "/requirements.txt" not found: not found

我做错了什么?

编辑:

我也试过改成:

COPY str/requirements.txt requirements.txt:

但是我仍然会得到这样的错误:

failed to compute cache key: "/src/requirements.txt" not found: not found

也许第二个 COPY 语句也要更改,但不确定如何更改

从 Dockerfile 构建映像时,它会从 Dockerfile 所在的目录(在您的情况下为 FinTechExplained_Python_Docker)搜索文件。

所以基本上要求位于 FinTechExplained_Python_Docker/src/requirements.txt,但 docker 在 FinTechExplained_Python_Docker/requirements.txt 搜索它们。

要解决此问题,您必须将第 5 行更改为:

COPY src/requirements.txt requirements.txt

您需要指定与构建上下文相关的 COPY 语句的来源,如下所示

FROM python:3.8-slim-buster

WORKDIR /src

COPY src/requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

COPY src/ .

CMD [ "python", "main.py"]

哦,我想我明白你为什么要 failed to compute cache key...

当您使用 COPY 在 Dockerfile 中复制文件时,您必须传递 Directory 文件应保存的位置 作为第二个参数。
喜欢COPY LOCAL_PATH_TO_FILE SERVER_PATH_TO_DIRECTORY

你的情况:

FROM python:3.8-slim-buster

WORKDIR /src

COPY src/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY src/ .

CMD [ "python", "main.py"]