我将在容器中看到什么 Linux 名称和版本?

我将在容器中看到什么 Linux 名称和版本?

cat /etc/os-release在容器中执行。

我有一台 Ubuntu 22.04 docker 主机。当我运行一个容器并查看容器内的 linux os-release 文件时,无论我在哪个容器中执行它,我都会看到我的 Ubuntu 名称...

但是我在 Ubuntu 22.04 上还有另一个 Kubernetes 集群(没有 docker,集群配置为直接使用 containerd)。如果我基于任何镜像创建部署,当我看到 os-release 文件时,我会看到一个特定于镜像的 Linux 名称,它显然来自镜像本身,有时是 alpine,有时是 bookworm 等。

为什么会有这种不同的行为?

答案1

/etc/os-release文件基于容器基础镜像,如果你获得与主机相同的版本,则仅意味着你运行基于 Ubuntu 22.04 的镜像。你可以使用基于不同系统的容器对其进行测试

示例来自我在 Ubuntu 上运行的机器,第一个命令来自主机,第二个命令来自容器

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.2 LTS"
...
$ docker run --rm -ti node:16 bash
root@3d48cdfe1d97:/# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
..

答案2

细节 :

Docker 容器具有分层的文件系统。
容器根/文件系统与主机根文件系统不同/
容器/etc/与主机不同/etc/

在这种情况下,容器/etc/os-release可能是也可能不是主机/etc/os-release
[[取决于安装在哪里]]

通过分层,如果容器仍在使用主机/etc/os-release文件[[由于挂载点和映射]],那么我们将看到主机操作系统详细信息,而如果容器正在使用自己的或修改过的/etc/os-release文件,那么我们将看到该文件的内容,它们可能是相同或不同的。

运行 Ubuntu Docker 容器的 Debian Docker 主机(无自带)/etc/os-release/etc/os-release将包含 Debian。

Debian Docker 主机运行 Debian Docker 容器,其自身/etc/os-release/etc/os-release将包含 Debian。

Debian Docker Host 运行 Ubuntu Docker 容器,其自身/etc/os-release/etc/os-release将包含 Ubuntu。

概括 :

/etc/os-release容器中的 更新 [[ 它有自己的/etc]] 时,它将提供容器的详细信息。当容器中的 未更新 [[ 原始内容可通过安装到同一安装点获得]]
时,它将提供主机的详细信息。/etc/os-release/etc//etc/

相关内容