Docker容器中正在运行哪个操作系统?


20

大多数时候,我可以使用这两种方式之一来判断哪个操作系统正在我的Docker容器中运行(alpine,centOS等)

但是这次,我不能告诉:

bash-4.2$ uname -a       
Linux 6fe5c6d1451c 2.6.32-504.23.4.el6.x86_64 #1 SMP Tue Jun 9 20:57:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

bash-4.2$ more /etc/issue
\S
Kernel \r on an \m

有什么方法可以获取正在运行的操作系统的文本版本?

Answers:


31

我喜欢使用Screenfetch。您可能想尝试一下。

如果查看代码,可以看到它如何确定分布:

  • lsb_release -sirc
  • cat /etc/os-release

并涵盖CentOS:

  • cat /etc/issue

1
“ / etc / os-release”确实是一个很好的来源,但是在某些centOS上不存在。如果您只有一个决定权,我会说:“ ls / etc / * release”。但是,如果需要字符串方式,则需要“ cat / etc / os-release”和“ cat / etc / issue”来覆盖所有情况。谢谢你们俩
Bob Yoplait

是的高山上,他们都工作cat /etc/issuecat /etc/alpine-release
朱利安

7

uname 会告诉您正在运行的内核,即主机OS内核(与VM不同,容器共享同一内核)。

要识别容器的基本图像,无法保证容器内部有解决方案。您可以从Janosch提供的主要供应商那里查找指针(对于大多数供应商(如Debian,CentOS和Alpine)为/ etc / os-release,对于Ubuntu则为/ etc / lsb-release)。您也可以检查软件包管理工具是否已安装(/ etc / apk,/ etc / apt,/ etc / yum)。

在容器外部,您可以检查图像并跟踪图层以查看图像的来源,但这会导致定位sha256校验和。最好的方法是检查用于构建映像的Dockerfile。


到目前为止,当我在使用最新Ubuntu映像的Windows上运行此代码时,uname就返回了Linux,然后uname -a才返回Linux 89e9cd67fc7a 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
David Culbreth

1
Linuxkit是嵌入式Docker VM,它是具有在Windows上的Docker上运行的容器的主机OS。
米奇(Bitch)

“ uname”将为您提供有关基础主机而不是容器的详细信息(即使您在容器中运行它)。
Trondh

@Trondh我相信那是我所说的。答案中是否有需要纠正的内容?
BMitch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.