gpt4 book ai didi

python - 确定 docker 镜像的操作系统分布

转载 作者:IT老高 更新时间:2023-10-28 12:43:44 24 4
gpt4 key购买 nike

我需要确定任何 docker 镜像的操作系统分发名称。我可以将ubuntu:latest标记为image1:latest,但是应该可以在image1:latest启动的时候得到它的分布信息。

为了实现这一点,我使用下面提到的命令来确定操作系统版本:

$ docker tag ubuntu image1
$
$ docker run -it image1 /bin/sh -c "echo import platform > test.py; echo print\(platform.dist\(\)\) >> test.py; python3 test.py"
('Ubuntu', '14.04', 'trusty')
$

但是,这取决于图像中是否包含 python2python3。 ubuntu:12.04 失败,我需要在那里使用 python2。

$ docker run -it ubuntu /bin/sh -c "echo import platform > test.py; echo print\(platform.dist\(\)\) >> test.py; python3 test.py"
('Ubuntu', '14.04', 'trusty')
$
$ docker run -it ubuntu:12.04 /bin/sh -c "echo import platform > test.py; echo print\(platform.dist\(\)\) >> test.py; python3 test.py"
/bin/sh: 1: python3: not found
$
$ docker run -it ubuntu:12.04 /bin/sh -c "echo import platform > test.py; echo print\(platform.dist\(\)\) >> test.py; python2 test.py"
('Ubuntu', '12.04', 'precise')
$

第一季度。有没有一种方法可以在不知道特定图像中存在哪个版本的 python 的情况下实现相同的目标?

注意:目标是确定用于构建此镜像的基础镜像。我无权访问用于构建此镜像的 Dockerfile。

第二季度。还有另一种使用入口点的方法。我可以使用 Dockerfile 从当前图像构建一个单独的图像。或者,我可以在创建容器时在 cmdline 中指定入口点,但我需要在容器内可以访问脚本。我猜我在使用 cmdline 时可能需要共享存储,有没有更好的方法来实现这一点?任何指针都会很有帮助。

谢谢。

最佳答案

文件系统层次标准有一个 standard definition for /etc/os-release ,它应该在大多数发行版上都可用:

The /etc/os-release and /usr/lib/os-release files contain operating system identification data.

The basic file format of os-release is a newline-separated list of environment-like shell-compatible variable assignments. It is possible to source the configuration from shell scripts.

这意味着您可以只获取 /etc/os-release 并使用 $NAME$ID 来识别发行版。例如,在 Fedora 上它看起来像这样:

% source /etc/os-release
% echo $NAME
Fedora
% echo $ID
fedora

在 Debian 上:

% source /etc/os-release
% echo $NAME
Debian GNU/Linux
% echo $ID
debian

关于python - 确定 docker 镜像的操作系统分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35689431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com