如何添加相对路径以及如何使用 Podman 在容器中挂载卷
How to add relative paths and how to mount volumes in a container with Podman
我想使用 Podman 构建一个包含以下内容的容器:
- 一个Python个申请
- 我开发的 Python 模块与 Python 应用程序
没有存储在同一个地方
- Python 环境(由 miniconda/mambaforge 制作)
- 输入数据的挂载文件夹
- 输出数据的挂载文件夹
为此,我在我的主目录中添加了一个 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
我想使用 Podman 构建一个包含以下内容的容器:
- 一个Python个申请
- 我开发的 Python 模块与 Python 应用程序 没有存储在同一个地方
- Python 环境(由 miniconda/mambaforge 制作)
- 输入数据的挂载文件夹
- 输出数据的挂载文件夹
为此,我在我的主目录中添加了一个 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