是否有必要在我的 Dockerfile 中为每个命令显式指示 WORKDIR?
Is it necessary to explicitly indicate the WORKDIR for each command in my Dockerfile?
我有以下文件结构:
Dockerfile:
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
WORKDIR /home/pos
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY /src /src
CMD ["python", "src/manage.py", "runserver"]
我希望 src/ 文件夹的内容将被复制到容器中的同一路径 (home/pos/src/) 但只有 requirements.txt 被复制到该路径,内容/src 文件夹正在被复制到“根目录”(/),因此我需要将命令更改为:
COPY /src /home/pos/src
每个命令都需要设置WORKDIR吗?
如果您在 COPY
的 right-hand 侧使用绝对路径,那么它会使用容器中的绝对路径。如果您使用相对路径,那么它是相对于当前 WORKDIR
。在你的 Dockerfile 中你有一个绝对路径 /src
所以这是目的地,但是如果你将它更改为相对路径
COPY ./src/ ./src/
它将在当前WORKDIR
下。
我建议在 COPY
的 right-hand 一侧尽可能避免使用路径和文件名;例如你也可以 COPY requirements.txt ./
.
(COPY
的 left-hand 端的规则有点不同:所有领先的 ..
路径组件都被剥离,然后不管它是绝对路径还是相对路径解释为 build-context 目录下的路径。因此,即使源代码看起来像绝对路径,它也经常被解释为相对于 Dockerfile 的路径。同样,在 left-hand 侧使用相对路径 COPY
可能更清楚。)
我有以下文件结构:
Dockerfile:
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
WORKDIR /home/pos
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY /src /src
CMD ["python", "src/manage.py", "runserver"]
我希望 src/ 文件夹的内容将被复制到容器中的同一路径 (home/pos/src/) 但只有 requirements.txt 被复制到该路径,内容/src 文件夹正在被复制到“根目录”(/),因此我需要将命令更改为:
COPY /src /home/pos/src
每个命令都需要设置WORKDIR吗?
如果您在 COPY
的 right-hand 侧使用绝对路径,那么它会使用容器中的绝对路径。如果您使用相对路径,那么它是相对于当前 WORKDIR
。在你的 Dockerfile 中你有一个绝对路径 /src
所以这是目的地,但是如果你将它更改为相对路径
COPY ./src/ ./src/
它将在当前WORKDIR
下。
我建议在 COPY
的 right-hand 一侧尽可能避免使用路径和文件名;例如你也可以 COPY requirements.txt ./
.
(COPY
的 left-hand 端的规则有点不同:所有领先的 ..
路径组件都被剥离,然后不管它是绝对路径还是相对路径解释为 build-context 目录下的路径。因此,即使源代码看起来像绝对路径,它也经常被解释为相对于 Dockerfile 的路径。同样,在 left-hand 侧使用相对路径 COPY
可能更清楚。)