如何知道哪个Debian版本的Docker可以运行在哪个Debian版本上?

问题描述 投票:0回答:1

我拥有运行与不同 Debian 版本(bullseye 和 bookworm)兼容的应用程序的生产服务器。我想将所有这些应用程序移动到一台机器上,为此,我考虑将它们容器化。

但据我了解,您不能在任何内核上运行任何容器映像。 这篇文章解释了你要运行的软件必须“足够兼容”,否则会出现问题。

这就是为什么我正在寻找某种兼容性矩阵,它可以告诉我哪个 Debian 版本可以作为来宾在哪些内核版本上正常运行。

由于我找不到这样的矩阵,我想我错过了一些东西或者不了解有关容器的一些东西。是基于每个应用程序吗?我正在尝试做的事情是否根本不被建议,我应该继续为每个 Debian 版本使用一台服务器?

docker debian compatibility
1个回答
0
投票

TLDR,对于大多数软件来说这不应该是一个问题。不要想太多,除非你的操作系统或容器镜像确实很古老。

为什么会出现问题?

用户空间软件依赖内核 API(即系统调用)来完成许多事情。如果一个软件是针对一个内核的 API 构建的,但随后在不同的内核上运行,则它可能会尝试执行一些旧内核不支持的系统调用。或者 API 可能在版本之间发生了重大变化。在这些情况下,您将得到

ENOSYS
EINVAL
,并且您的用户空间程序可能会崩溃。

在容器化的背景下,由于容器共享主机的内核,因此构建软件的内核与实际运行的内核之间可能存在版本不匹配的情况。

为什么这通常不是一个问题?

要显现此问题,用户空间程序必须进行无效的系统调用。但由于 Linux 内核的成熟度和政策,这实际上是一种不太可能的情况。

首先,Linux 内核有“永不破坏用户空间”的既定政策。实际上,这意味着旧的内核 API 很少(甚至从未;我不确定)被删除或引入了重大更改。这项政策非常重要,以至于经常会故意保留“技术上有缺陷”的行为。这意味着几乎可以保证针对旧内核构建的软件可以在新内核上运行。如果不是,则被视为回归错误。

其次,Linux 作为一个项目已经有 30 多年的历史了,这意味着最常用的 API 已经稳定了很长一段时间。因此,绝大多数软件都可以在任何相当现代的内核上正常运行,除非它实际上使用了非常新的内核 API。对于少数这样做的软件,他们的开发人员通常都意识到这一点,并为旧内核实现了安全回退。

© www.soinside.com 2019 - 2024. All rights reserved.