【问题标题】:Docker windows version container compatibilityDocker windows 版本容器兼容性
【发布时间】:2020-01-28 09:44:28
【问题描述】:

有一个问题没有出现在论坛中,有什么需要讨论的理由,恕我直言: 为什么不能在较旧的主机系统上拉取或构建 windows docker 映像(即 nanoserver 2019)?在官方网站上,记录在案,它不兼容运行,是的: Version compatibility

但是,正如我所说,“奔跑”。我不需要在较旧的主机系统上运行较新的 Windows 容器映像,我只想拉取并构建它,以便稍后将其分发到兼容的系统。

因此,有没有办法处理这个不应该存在的问题?

【问题讨论】:

    标签: windows docker docker-container windows-server-2019


    【解决方案1】:

    你错过了一件重要的事情:

    即使只是做docker build,它也会使用容器,它使用容器而不是直接在您的主机上构建。接下来是docker build时的过程:

    1. Docker 将根据您在 Dockerfile 中使用FROM 提到的基本映像创建一个临时构建容器。

    2. 在上述临时构建容器中运行 Dockerfile 的所有指令。

    3. 将临时构建容器保存为镜像。

    所以,正如你所说,你已经看到了来自微软的容器Version compatibility,所以现在我想你也可以看到为什么构建也需要这个,因为它也会创建一个容器(只是这个临时容器将在之后被删除构建)。

    更新:

    整个故事是:

    是的,在linux中,旧的主机操作系统构建/运行新的操作系统镜像/容器没有问题,因为主机和容器只是共享同一个内核,rootfs由容器本身提供。

    但是,你在谈论 windows,来自windows official,我们可以看到下一个:

    Windows Server 2016 和 Windows 10 周年更新(均为版本 14393)是第一个可以构建和运行 Windows Server 容器的 Windows 版本。使用这些版本构建的容器可以在较新的版本(例如 Windows Server 1709 版)上运行,但在开始之前您需要了解一些事项。

    由于我们一直在改进 Windows 容器功能,因此我们不得不进行一些可能会影响兼容性的更改。旧容器将在具有 Hyper-V 隔离的新主机上运行相同,并将使用相同(旧)内核版本。但是,如果您想基于较新的 Windows 构建运行容器,它只能在较新的主机构建上运行。

    以上就是老windows os无法运行新windows容器的原因。

    还有,我想说的是docker builddocker run的道理一样:

    docker run $theImageName需要基于镜像theImageName启动一个容器,而正如微软所说,新的os容器必须使用内核的新特性,所以新容器不能使用旧的windows主机。请记住,容器和主机将共享同一个内核。

    并且,docker build -t xxx . 会在其中找到带有FROM $baseImageNameDockerfile,然后基于图像$baseImageName 启动一个容器,这个容器是一个临时容器。 Dockerfile 中的所有指令都将在这个临时容器中执行,而不是在 docker 主机中。最后,这个临时构建容器将被删除,所以你没有看到这个临时容器。

    所以,如您所见,docker rundocker build 都将启动需要利用新 windows 主机功能的容器,不能使用旧 windows 内核。这是微软的限制,如果你已经了解了docker run在windows上的限制,原因和docker build在windows上的限制是一样的。

    【讨论】:

    • 很好的额外信息,谢谢,但我还是不明白,为什么这应该避免构建更新的操作系统映像? docker 镜像提供了一个包含多个文件和目录的文件系统,如果文件系统在这两种情况下都是 NTFS,为什么旧​​的操作系统版本不能处理它。还有什么其他原因,我没看出来?
    • 好的,明白了,build也需要预先运行镜像,并且由于微软所做的更改影响兼容性,新操作系统的容器版本无法与旧操作系统内核版本兼容。
    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多