【问题标题】:How can I build a docker image with it parent folder as workdir?如何使用父文件夹作为 workdir 构建 docker 映像?
【发布时间】:2021-05-29 22:45:37
【问题描述】:

这可能是一个愚蠢的问题,但我是 Docker 的新手,对此我感到很困惑。我有一个包含许多子文件夹的项目,如下例所示:

project-folder:
       folder_1:
           code1.py
           Dockerfile
           requirements.txt
       folder_2:
           code2.py
           Dockerfile
           requirements.txt
       folder_data:
           file1
           file2
           file3

那么,我想这样做:

  1. project-folder 中为所有容器维护我的工作目录;
  2. 在每个容器中,我应该能够访问 folder_data - 我知道我必须指定一个卷,但如果不将我的 project-folder 保留为工作目录,我不知道该怎么做;
  3. 我需要将我的工作目录 (project-folder) 传递给我的 code1.py

注意: 只有当我在每个子文件夹中创建图像时,我的图像才成功创建,例如这个 Dockerfile:

FROM python:3.6-slim
COPY . /folder_1
WORKDIR /folder_1
RUN pip install -r requirements.txt
CMD ["python3", "code1.py", "$(pwd)"]

图像创建命令:

docker build -t image_folder1 .

我目前正在folder_1 的上下文中创建图像,因为我无法在project-folder 的上下文中正确创建图像

【问题讨论】:

  • 我觉得你的目标有点不清楚。您是否要创建两个单独的 dockerfile:一个可以访问 folder_1,另一个可以访问 folder_2,并且所有人都应该可以访问 folder_data?
  • 是的,这正是我想要的。

标签: docker dockerfile workdir


【解决方案1】:

docker build 命令末尾的. 参数是上下文目录;你COPY 进入你的图像的任何东西都必须在这个子树中。如果您需要在图像中包含其直接子树之外的内容,则需要使用祖先目录作为构建上下文,但您可以使用 docker build -f 选项在子目录中命名文件。

cd project-folder
docker build -t image_folder1 -f folder_1/Dockerfile .

在 Dockerfile 中,由于您从父目录开始,因此您需要包含您 COPY 中的任何文件的相对路径;但是,现在允许包含以前的同级目录。

FROM python:3.6-slim
WORKDIR /app

# Good practice to copy just dependencies first; this helps
# layer caching when you repeat `docker build`.
# COPY source path is relative to the `docker build` directory,
# which we've set up to be the parent of the application source.
COPY folder_1/requirements.txt .
RUN pip install -r requirements.txt

# Now copy in the rest of the application
COPY folder_1 .

# And also copy the shared data
COPY folder_data ./folder_data

# And have ordinary container startup metadata
CMD ["./code1.py"]

这里不要使用卷。 Docker 具有从映像内容填充命名卷的诱人行为,但是如果您重新构建,旧卷内容将优先于更新的映像内容,这仅适用于本机 Docker 卷(不是主机目录绑定挂载,根本不是在 Kubernetes 中)。拥有一个包含应用程序需要运行的所有内容的独立映像比拥有需要从外部注入关键内容的部分映像更好的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 2018-09-29
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多