将文件映射到Podman容器后容器内无该文件的问题求助
问题
我尝试将一个Python程序部署到Podman容器中,该程序需要配置文件位于容器内的/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异常,提示无法读取配置文件(文件缺失时的预期表现)。通过验证,容器内确实没有该文件:
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 create创建了带卷映射的容器cdr_archiver,但后续用podman run直接启动镜像,相当于新建了一个无映射的容器,自然找不到配置文件。正确做法是启动已创建好的容器:podman start -i cdr_archiver或者直接在
run命令中加入卷映射参数一步完成:podman run -i -t -v $PWD/cdr_archive.conf:/etc/cdr_archive.conf localhost/cdrarchiver ls -l /etc/cdr_archive.conf检查路径拼写一致性:注意你描述中程序需要的路径是
/etc/cdr_arhive.conf(少了一个字母c),但映射命令中用的是/etc/cdr_archive.conf,需确保程序读取路径和映射路径完全一致,避免拼写错误导致文件找不到。验证文件读取权限:容器以UID 1000的
python用户运行,需确保宿主机上的cdr_archive.conf文件允许该用户读取。可先修改宿主机文件权限:chmod o+r $PWD/cdr_archive.conf
内容的提问来源于Stack Exchange,提问作者VagrantPaladin
相关产品推荐
相关产品推荐

