Совместимость с версией Docker для Windows - PullRequest
1 голос
/ 28 сентября 2019

Существует один вопрос, который не появляется на форумах, что имеет причину для обсуждения, ИМХО: почему невозможно извлечь или скомпоновать образы Windows Docker (например, nanoserver 2019) на старом хосте?система?На официальном сайте задокументировано, что он не совместим для запуска, да: Версия совместимости

Но, как я уже сказал, «для запуска».Мне не нужно запускать этот новый образ контейнера Windows на старой хост-системе, я просто хочу вытащить и собрать его, чтобы потом распространить его на совместимую систему.

Таким образом, есть ли способсправиться с этой проблемой, которая не должна быть одна?

1 Ответ

0 голосов
/ 29 сентября 2019

Вы пропустили одну важную вещь:

Даже просто сделайте docker build, он будет использовать контейнер, он будет использовать контейнер для сборки не непосредственно на вашем хост-компьютере.Далее идет процесс, когда docker build:

  1. Docker создаст временный контейнер сборки из базового образа, который вы упоминали в Dockerfile с FROM.

  2. Запустите все инструкции Dockerfile в указанном выше контейнере временной сборки.

  3. Сохраните контейнер временной сборки как образ.

Итак, каквы сказали, что видели совместимость версий для контейнера от Microsoft, так что теперь я думаю, что вы также можете понять, зачем сборке это нужно, просто потому, что он также создаст контейнер (только этот временный контейнер будет удален после сборки).

ОБНОВЛЕНИЕ:

Вся история такова:

ДА, в Linux, нет проблем для старого хоста OS для сборки / запускановый образ / контейнер os, поскольку хост и контейнер просто совместно используют одно и то же ядро, rootfs предоставляется самим контейнером.

НО, вы говорите о windows, из windows official , мы могли бысм. далее:

Windows Server 2016 и Windows 10 Anniversary Update (обе версии 14393) были первыми выпусками Windows, которые могли создавать и запускать контейнеры Windows Server.Контейнеры, созданные с использованием этих версий, могут работать в более новых выпусках, таких как Windows Server версии 1709, но есть несколько вещей, которые необходимо знать перед началом работы.

Поскольку мы улучшали функции контейнера Windows, мы "Мы должны были внести некоторые изменения, которые могут повлиять на совместимость.Старые контейнеры будут работать одинаково на новых хостах с изоляцией Hyper-V и будут использовать ту же (более старую) версию ядра.Однако, если вы хотите запустить контейнер на основе новой сборки Windows, он может работать только на новой сборке хоста.

Выше приведена причина, по которой старые ОС Windows не могли запустить новый контейнер Windows..

Более того, я хочу сказать, что docker build по той же причине: docker run:

docker run $theImageName необходимо запустить контейнерную базу на изображении theImageName,и, как сказал Microsoft, новый контейнер OS должен был использовать новые функции ядра, поэтому новый контейнер не может использовать старый хост Windows.Помните, что контейнер и хост будут использовать одно и то же ядро.

И, docker build -t xxx . найдет Dockerfile с FROM $baseImageName в нем, а затем запустит базу контейнера на изображении $baseImageName, этот контейнервременный контейнер.Все инструкции в Dockerfile будут выполняться в этом временном контейнере, а не в хосте Docker.И, наконец, этот временный контейнер сборки будет удален, поэтому вы не видели этот временный контейнер.

Итак, как вы видите, оба docker run & docker build запустят контейнер, который должен использовать новыйФункция хоста Windows, не может использовать ядро ​​старого Windows.Это предел для Microsoft, если вы уже поняли ограничение для docker run на Windows, причина такая же, как docker build на Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...