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

新手上路,请多包涵

我需要确定任何 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')
$

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

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

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

谢谢。

原文由 Rahul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 396
2 个回答

文件系统层次结构标准 /etc/os-release 有一个标准定义,它应该在大多数发行版中可用:

/etc/os-release 和 /usr/lib/os-release 文件包含操作系统标识数据。

os-release 的基本文件格式是一个以换行符分隔的类环境 shell 兼容变量赋值列表。可以从 shell 脚本获取配置。

这意味着您可以仅来源 /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

原文由 morxa 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以为 Debian/Ubuntu 使用 /etc/issue 文件:

 root@ubuntu_container:/# cat /etc/issue
Ubuntu 14.04.3 LTS \n \l

或 CentOS/Red Hat/Fedora 的 /etc/redhat-release:

 [root@fedora_container /]# cat /etc/redhat-release
Fedora release 23 (Twenty Three)

[root@centos_container /]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

原文由 pie 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题