将文件映射到 podman 容器会导致容器中没有文件

问题描述 投票:0回答:1

我正在尝试将 python 程序放入容器中。该程序需要一个配置文件位于

/etc/cdr_arhive.conf

我根据我发现其他人在博客和帖子中执行此操作的方式来创建具有映射卷的容器。然而,它不适用于我尝试过的任何选项组合。

Dockerfile:

FROM python:3.11

RUN groupadd -g 1000 python && \
    useradd -r -u 1000 -g python python

COPY ../requirements.txt .
RUN pip install -r requirements.txt

RUN mkdir /app && chown python:python /app
WORKDIR /app

COPY main.py minio_controller.py mysqldump.py storage_controller.py db-checks.py .
RUN mkdir util
COPY util/ util/

USER 1000

CMD ["python"]

构建和创建容器:

johan@kompir ~/P/cdr-archiver (master)> podman build -t cdrarchiver .
STEP 1/11: FROM python:3.11
STEP 2/11: RUN groupadd -g 1000 python &&     useradd -r -u 1000 -g python python
--> Using cache 9f36ca3676187e5b58180cd124c37c246ae6ee41fcf4163850635b7f55813dd5
--> 9f36ca36761
STEP 3/11: COPY ../requirements.txt .
--> Using cache 33e56da82582af392371e3af89abd757ecf55bf4bbeb8beafbbd88e27c5fb6b3
--> 33e56da8258
STEP 4/11: RUN pip install -r requirements.txt
--> Using cache 08c45ba7ab9157ea2bc576f5b2405378f71917a089f4a2b35a9e4d8b85012835
--> 08c45ba7ab9
STEP 5/11: RUN mkdir /app && chown python:python /app
--> Using cache 58620616aa86938ebe43c3e46a9c0e929f94b36f771e7b11ed0847fd5b522afd
--> 58620616aa8
STEP 6/11: WORKDIR /app
--> Using cache 8b11db9a1afcda370b8aef5e2cfb8d6e291eabf688754340964ba17814f7f857
--> 8b11db9a1af
STEP 7/11: COPY main.py minio_controller.py mysqldump.py storage_controller.py db-checks.py .
--> 2db0b02eee9
STEP 8/11: RUN mkdir util
--> ba4ff005421
STEP 9/11: COPY util/ util/
--> 6ba25a873e3
STEP 10/11: USER 1000
--> 6bc9cd1ef9f
STEP 11/11: CMD ["python"]
COMMIT cdrarchiver
--> c14101cdda0
Successfully tagged localhost/cdrarchiver:latest
c14101cdda0cb476b4868e514f32cc496a2ba8e743fa6ff7bf51baf49bd1232b

使工作配置文件在容器内可见:

johan@kompir ~/P/cdr-archiver (master)> cp /etc/cdr_archive.conf .
johan@kompir ~/P/cdr-archiver (master) [1]> ls -l cdr_archive.conf 
-rw-r--r-- 1 johan johan 561 Apr 29 08:06 cdr_archive.conf
johan@kompir ~/P/cdr-archiver (master)> podman create --name cdr_archiver -v $PWD/cdr_archive.conf:/etc/cdr_archive.conf cdrarchiver
c78baa6b74fdce5ace5803e4931374ee39a7a23101cd325cc2a953ceeeb5031f

当尝试运行程序时,我收到一个 Python 异常,指出无法读取配置文件(配置文件丢失时的预期行为)。

当我用 podman exec 检查它时,我可以确认该文件不存在:

johan@kompir ~/P/cdr-archiver (master)> podman run -i -t localhost/cdrarchiver ls -l /etc/cdr_archive.conf
ls: cannot access '/etc/cdr_archive.conf': No such file or directory

无论如何,该容器是在 Fedora 39 上使用 podman 3.4.2 创建的。我还没有尝试过的一件事是以 root 身份运行它,但即使它有效,这也不是一个可接受的解决方案。

知道我做错了什么吗?

基本上我尝试将文件映射到 podman 容器中。没有错误,但是容器中看不到该文件。

python fedora podman
1个回答
0
投票

解决方案是使用

podman run -ti -v /path/to/file:/path/to/file localhost/imagename

这是因为

podman run
创建了一个新容器,并忽略了先前
podman create
命令中使用的映射卷。

注意,根据您的操作系统,可能需要使用“:Z”来映射 SElinux 上下文,正如 @mattdm 所暗示的。

© www.soinside.com 2019 - 2024. All rights reserved.