如何添加相对路径以及如何使用 Podman 在容器中挂载卷

How to add relative paths and how to mount volumes in a container with Podman

我想使用 Podman 构建一个包含以下内容的容器:

为此,我在我的主目录中添加了一个 Dockerfile。我不得不将 Dockerfile 放在如此高的路径级别,因为它似乎需要位于我想添加到容器中的任何文件夹之上。事实上,我尝试使用带“../../some/path/”的上升路径添加文件夹,但它不起作用。然后,第一个问题是:是否有添加不在 Dockerfile 下方(路径中)的文件夹的解决方案?

Dockerfile 的内容如下:

FROM python:3

# Add the Python application
ADD /path/to/my_python_app /my_python_app

# Add the Python modules used by the Python application
ADD /path/to/my_modules /my_modules

# Add the whole mambaforge folder (contains the virtual envs) with the exact same path than the local one
ADD /path/to/mambaforge /exact/same/path/to/mambaforge

# Create a customized .bashrc (contains 'export PATH' to add mamba path and 'export PYTHONPATH' to add my_modules path)
ADD Dockerfile_bashrc /root/.bashrc

然后,我构建容器:

podman build -t python_app .

并且 运行 它与:

podman run -i -t python_app -v /path/to/input/data:/mnt/input -v /path/to/output/data:/mnt/output /bin/bash

容器 运行 正确,我可以在其中执行我的 Python 应用程序。但是,这些卷不会出现在 /mnt 中。第二个问题是:How to mount volumes in a container? 我试过使用“--volume”和“--mount”,使用“/path/to/input/data:/mnt/input:z' 和 '/path/to/input/data:/mnt/input:Z',但没有任何效果。

非常感谢您的帮助!

解决方案在评论中给出。总结如下:

是否有添加不在 Dockerfile 下方(在路径中)的文件夹的解决方案? 否,不允许 ADD ../some/path/ 是出于安全考虑原因。

如何在容器中装载卷?参数的顺序不正确。选项 -v 需要出现在图像名称之前。以下命令工作正常:

podman run -i -t -v /path/to/input/data:/mnt/input -v /path/to/output/data:/mnt/output python_app /bin/bash