获取 docker 容器中当前 .py 文件的绝对路径
Get absolute path of current .py file in docker container
我正在尝试获取 .py 文件的绝对路径以访问位于同一目录中的其他文件 (/files
)。作为 jenkins 管道的一部分,所有文件都安装在 docker 容器中。在 .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 所述。
我正在尝试获取 .py 文件的绝对路径以访问位于同一目录中的其他文件 (/files
)。作为 jenkins 管道的一部分,所有文件都安装在 docker 容器中。在 .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 所述。