如何解决获取docker容器中当前.py文件的绝对路径
我正在尝试获取 .py 文件的绝对路径以访问位于同一目录 (/files
) 中的其他文件。所有文件都安装在 docker 容器中,作为 jenkins 管道的一部分。在 .py 文件中,我使用以下语法获取绝对路径:
from pathlib import Path
current_dir = f"{Path(__file__).resolve().parent}/result.txt"
该文件存在于容器中,但我收到以下错误:
No such file or directory: '/tmp/.tmpAA7qY3/files/result.txt'
Jenkins 文件如下所示:
node('docker') {
docker.image("circleci/python:3.7-buster").inside('--user root:root'+' -v /var/run/docker.sock:/var/run/docker.sock') {
stage("Scan dependencies") {
checkout scm
sh 'poetry run pytest'
}
}
}
解决方法
Jenkins
将为每个特定的构建实例创建一个名为 workspace
的新临时文件夹。因此,您的代码确实在 /tmp/.tmpAA7qY3
中。由于您在 tmp 文件夹中运行,因此 __file__
将解析为该路径并不奇怪。
您需要找出您正在搜索的文件相对于您的临时文件夹的确切位置,或作为绝对路径。如果您无法控制文件的创建方式,最简单的方法是执行 find / -name result.txt
并获得结果。
如果文件是在 Jenkins
管道流的另一个阶段创建的,则该文件可能不在容器中,因为每个阶段都可以创建自己的容器,如 here 所述。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。