Zgodność wersji kontenera systemu Windows
Dotyczy: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
Windows Server 2016 i Windows 10 Anniversary Update (obie wersje 14393) były pierwszymi wersjami systemu Windows, które mogą kompilować i uruchamiać kontenery systemu Windows Server. Kontenery utworzone przy użyciu tych wersji mogą być uruchamiane w nowszych wersjach, ale przed rozpoczęciem należy znać kilka rzeczy.
Architektura systemu Windows różni się znacznie od architektury systemu Linux. System Linux ma monolityczne jądro, podczas gdy tryb użytkownika i tryb jądra w systemie Windows są ściślej powiązane. Do momentu wprowadzenia kontenerów tryb użytkownika i jądra systemu Windows były dostarczane w synchronizacji, co skutkuje tym, że wymagania zgodności kontenerów w Windows różnią się od norm w Linuksie.
Oddzielenie granicy użytkownika/jądra w systemie Windows jest monumentalnym zadaniem i bardzo nietrygalnym, jednak ciężko pracowaliśmy, aby ustabilizować tę granicę we wszystkich systemach Windows, aby zapewnić naszym klientom elastyczność uruchamiania kontenerów na poziomie podrzędnym. Począwszy od systemów Windows 11 i Windows Server 2022, umożliwiamy uruchamianie kontenerów Izolowanych procesów WS2022 na hostach systemu Windows 11. Zrobiliśmy wszystko, co w naszej mocy, aby przechwycić obszary, które przerywają granicę, ale teraz chcemy otworzyć tę funkcję deweloperom w systemie Windows 11, aby uzyskać opinię. Zobowiązujemy się umożliwić Ci to doświadczenie, więc proszę nas poinformować, kiedy wystąpią problemy .
W przypadku każdego innego scenariusza, w którym występuje niezgodność zgodności wersji systemu Windows hosta/gościa między trybem użytkownika/jądra jest możliwa, ale nie jest gwarantowana, a tym samym obraz kontenera nie będzie mógł działać na hoście. W przypadku jakiejkolwiek rozbieżności wersji, uruchomienie z izolacją Hyper-V zapewnia kontenerowi zestaw odpowiednich plików binarnych jądra i nie jest zależne od wersji hosta. Zapoznaj się z poniższymi tabelami, aby uzyskać szczegółową macierz zgodności.
Zgodność hosta systemu operacyjnego z Windows Server
Wersja systemu operacyjnego obrazu podstawowego kontenera | Obsługuje izolację Hyper-V | Obsługuje izolację procesów |
---|---|---|
Windows Server 2025 | ✅ | ✅ |
Windows Server 2022 | ✅ | ✅ |
Windows Server 2019 | ✅ | ❌ |
Windows Server 2016 | ✅ | ❌ |
Zgodność systemu operacyjnego hosta klienta z systemem Windows
Wersja systemu operacyjnego podstawowego obrazu kontenera | Obsługuje izolację Hyper-V | Obsługuje izolację procesów |
---|---|---|
Windows Server 2025 | ✅ 1 | ✅ 1 |
Windows Server 2022 | ✅ | ✅ |
Windows Server 2019 | ✅ | ❌ |
Windows Server 2016 | ✅ | ❌ |
- Obsługiwane od systemu Windows 11 24H2 (
Build 2600
) i nowszych.
Notatka
System Windows 10 w wersji 1809 i Windows Server 2019 miał w tej chwili ten sam numer kompilacji. Od tego czasu otrzymywali niezależne aktualizacje, co doprowadziło do niezgodności numerów kompilacji. Izolacja procesów na kliencie systemu Windows jest dostępna w wersji testowej dla systemu Windows 11 z obrazami systemu Windows Server 2022, przy czym występuje niezgodność numeru kompilacji. Jeśli masz potrzebę uruchamiania kontenerów izolowanych procesów w systemie Windows 10, prosimy o informację w naszych zgłoszeniach na GitHubie .
Dopasowywanie wersji hosta kontenera z wersjami obrazów kontenera
Kontenery systemu Windows Server
Numer kompilacji (nowa wersja systemu Windows)
System operacyjny Windows ma cztery poziomy przechowywania wersji: wersja główna, pomocnicza, kompilacja i poprawka. Na przykład wersja 10.0.14393.103 będzie miała wersję główną 10, wersję pomocniczą 0, numer kompilacji 14393 i numer wersji 103. Numer kompilacji zmienia się tylko wtedy, gdy są publikowane nowe wersje systemu operacyjnego, a numer poprawki jest aktualizowany w miarę stosowania aktualizacji systemu Windows.
Z wyjątkiem WS2022 + Windows 11 kontenery systemu Windows Server są blokowane od uruchamiania, gdy numer kompilacji między hostem kontenera i obrazem kontenera są różne. Na przykład gdy host kontenera jest w wersji 10.0.14393.* (Windows Server 2016) i próbujesz uruchomić kontener z obrazem w wersji 10.0.16299.* (Windows Server, wersja 1709) usługa obliczeniowa systemu operacyjnego zwróci błąd niezgodności wersji.
Ograniczenia systemu Windows Server 2016
Kontenery oparte na systemie Windows Server 2016 nie będą działać w systemie, w którym numery poprawek hosta kontenera i obraz kontenera są różne. Jeśli na przykład host kontenera ma wersję 10.0.14393.1914 (system Windows Server 2016 z zastosowanym KB4051033) i obraz kontenera jest w wersji 10.0.14393.1944 (system Windows Server 2016 z zastosowanym KB4053579), a następnie obraz może nie zostać uruchomiony.
W przypadku hostów lub obrazów korzystających z systemu Windows Server w wersji 1809 lub nowszej ta reguła nie ma zastosowania — obraz hosta i kontenera nie wymaga dopasowania poprawek .
Notatka
Zdecydowanie zalecamy aktualizowanie zarówno hosta, jak i kontenerów przy użyciu najnowszych poprawek i aktualizacji, aby zachować bezpieczeństwo i zgodność. Aby uzyskać ważne wskazówki dotyczące sposobu aktualizowania kontenerów systemu Windows, zobacz Aktualizowanie kontenerów Windows Server.
Aplikacja praktyczna
Przykład 1: Host kontenera korzysta z systemu Windows Server 2016 z zastosowanym KB4041691. Każdy kontener systemu Windows Server wdrożony na tym hoście musi być oparty na obrazach podstawowych kontenerów w wersji 10.0.14393.1770. W przypadku zastosowania KB4053579 do kontenera hosta należy również zaktualizować obrazy, aby upewnić się, że kontener hosta je obsługuje.
Przykład 2: Host kontenera korzysta z systemu Windows Server w wersji 1809 z zastosowanym KB4534273. Każdy kontener Windows Server wdrożony na tym hoście musi być oparty na podstawowym obrazie kontenera Windows Server w wersji 1809 (10.0.17763), ale nie musi być dopasowany do wersji KB hosta. Jeśli na hoście zastosowano KB4534273, obrazy kontenerów będą nadal obsługiwane, ale zalecamy ich zaktualizowanie, aby rozwiązać potencjalne problemy z zabezpieczeniami.
Wykonywanie zapytań dotyczących wersji
Metoda 1: Wprowadzona w wersji 1709 wiersz polecenia cmd oraz polecenie ver teraz zwracają szczegóły rewizji.
Microsoft Windows [Version 10.0.16299.125]
(c) 2017 Microsoft Corporation. All rights reserved.
C:\>ver
Microsoft Windows [Version 10.0.16299.125]
Metoda 2. Wykonaj zapytanie dotyczące następującego klucza rejestru: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion
Na przykład:
C:\>reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.
PS C:\Users\Administrator> (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\').BuildLabEx
14393.321.amd64fre.rs1_release_inmarket.161004-2338
Aby sprawdzić, jakiej wersji używa obraz podstawowy, przejrzyj tagi w centrum Platformy Docker lub tabeli skrótów obrazu podanej w opisie obrazu. Strona historii aktualizacji systemu Windows 10 zawiera informacje o datach wydania poszczególnych kompilacji i poprawek.
izolacja Hyper-V dla kontenerów
Można uruchamiać kontenery systemu Windows z izolacją Hyper-V lub bez niej. Hyper-V izolacja tworzy bezpieczną granicę wokół kontenera z wykorzystaniem zoptymalizowanej maszyny wirtualnej. W przeciwieństwie do standardowych kontenerów systemu Windows współużytkujących jądro między kontenerami a hostem, każdy kontener Hyper-V izolowany ma własne wystąpienie jądra systemu Windows. Oznacza to, że możesz mieć różne wersje systemu operacyjnego na hoście kontenera i obrazie (aby uzyskać więcej informacji, zobacz poniższą macierz zgodności).
Aby uruchomić kontener z izolacją Hyper-V, dodaj po prostu tag --isolation=hyperv
do polecenia docker run.
Błędy z niezgodnych wersji
Jeśli spróbujesz uruchomić nieobsługiwaną kombinację, zostanie wyświetlony następujący błąd:
docker: Error response from daemon: container b81ed896222eb87906ccab1c3dd2fc49324eafa798438f7979b87b210906f839 encountered an error during CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101) extra info: {"SystemType":"Container","Name":"b81ed896222eb87906ccab1c3dd2fc49324eafa798438f7979b87b210906f839","Owner":"docker","IsDummy":false,"VolumePath":"\\\\?\\Volume{2443d38a-1379-4bcf-a4b7-fc6ad4cd7b65}","IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\\ProgramData\\docker\\windowsfilter\\b81ed896222eb87906ccab1c3dd2fc49324eafa798438f7979b87b210906f839","Layers":[{"ID":"1532b584-8431-5b5a-8735-5e1b4fe9c2a9","Path":"C:\\ProgramData\\docker\\windowsfilter\\b2b88bc2a47abcc682e422507abbba9c9b6d826d34e67b9e4e3144cc125a1f80"},{"ID":"a64b8da5-cd6e-5540-bc73-d81acae6da54","Path":"C:\\ProgramData\\docker\\windowsfilter\\5caaedbced1f546bccd01c9d31ea6eea4d30701ebba7b95ee8faa8c098a6845a"}],"HostName":"b81ed896222e","MappedDirectories":[],"HvPartition":false,"EndpointList":["002a0d9e-13b7-42c0-89b2-c1e80d9af243"],"Servicing":false,"AllowUnqualifiedDNSQuery":true}.
Istnieją trzy sposoby rozwiązywania tego błędu:
- Ponowne kompilowanie kontenera na podstawie poprawnej wersji
mcr.microsoft.com/microsoft-windows-nanoserver
lubmcr.microsoft.com/windows/servercore
- Jeśli host jest nowszy, uruchom polecenie docker run --isolation=hyperv ...
- Spróbuj uruchomić kontener na innym hoście z tą samą wersją systemu Windows
Wybierz wersję systemu operacyjnego kontenera do użycia
Notatka
Od 16 kwietnia 2019 r. tag "latest" nie jest już publikowany ani obsługiwany dla Windows Server, Windows Server Core, i obrazów bazowych kontenerów systemu operacyjnego Nano Server. Podczas ściągania lub odwoływania się do obrazów z tych repozytoriów należy zadeklarować określony tag.
Musisz wiedzieć, której wersji należy użyć dla kontenera. Jeśli na przykład chcesz, aby system operacyjny Windows Server w wersji 1809 jako system operacyjny kontenera miał najnowsze poprawki, należy użyć tagu 1809
podczas określania wersji obrazów kontenera podstawowego systemu operacyjnego, w następujący sposób:
FROM mcr.microsoft.com/windows/nanoserver:1809
...
Jeśli jednak chcesz uzyskać określoną poprawkę systemu Windows Server w wersji 1809, możesz określić numer KB w tagu. Aby na przykład uzyskać podstawowy obraz kontenera systemu operacyjnego Nano Server z systemu Windows Server w wersji 1809 z zastosowanym KB4493509, należy określić go w następujący sposób:
FROM mcr.microsoft.com/windows/nanoserver:1809-KB4493509
...
Możesz również określić dokładne poprawki, których potrzebujesz w schemacie użytym wcześniej, określając wersję systemu operacyjnego w tagu:
FROM mcr.microsoft.com/windows/nanoserver:10.0.17763.437
...
Podstawowe obrazy Server Core oparte na systemach Windows Server 2022 i Windows Server 2019 są Long-Term kanał obsługi (LTSC) wydania. Jeśli na przykład chcesz używać systemu operacyjnego kontenera obrazu Server Core Windows Server 2019 i mieć dla niego najnowsze poprawki, możesz określić wersje LTSC w następujący sposób:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
...
Pasujące wersje przy użyciu narzędzia Docker Swarm
Usługa Docker Swarm nie ma obecnie wbudowanego sposobu dopasowania wersji systemu Windows używanej przez kontener do wersji hosta. Jeśli zaktualizujesz usługę tak, aby korzystała z nowszego kontenera, zostanie ona pomyślnie uruchomiona.
Jeśli musisz uruchamiać wiele wersji systemu Windows przez długi czas, możesz wybrać jedno z dwóch podejść: skonfigurować hosty systemu Windows, aby zawsze korzystały z izolacji Hyper-V albo zastosować ograniczenia etykiet.
Znajdowanie usługi, która nie zostanie uruchomiona
Jeśli usługa nie zostanie uruchomiona, zobaczysz, że MODE
jest replicated
, ale REPLICAS
utknie przy 0. Aby sprawdzić, czy wersja systemu operacyjnego jest problemem, uruchom następujące polecenia:
Uruchom docker service ls, aby znaleźć nazwę usługi:
ID NAME MODE REPLICAS IMAGE PORTS
xh6mwbdq2uil angry_liskov replicated 0/1 windows/servercore/iis
Uruchom docker service ps (nazwa usługi), aby uzyskać stan i najnowsze próby:
C:\Program Files\Docker>docker service ps angry_liskov
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
klkbhn742lv0 angry_liskov.1 windows/servercore/iis WIN-BSTMQDRQC2E Ready Ready 3 seconds ago
y5blbdum70zo \_ angry_liskov.1 windows/servercore/iis WIN-BSTMQDRQC2E Shutdown Failed 24 seconds ago "starting container failed: co…"
yjq6zwzqj8kt \_ angry_liskov.1 windows/servercore/iis WIN-BSTMQDRQC2E Shutdown Failed 31 seconds ago "starting container failed: co…"
ytnnv80p03xx \_ angry_liskov.1 windows/servercore/iis WIN-BSTMQDRQC2E Shutdown Failed about a minute ago "starting container failed: co…"
xeqkxbsao57w \_ angry_liskov.1 windows/servercore/iis WIN-BSTMQDRQC2E Shutdown Failed about a minute ago "starting container failed: co…"
Jeżeli widzisz starting container failed: ...
, możesz zobaczyć pełny błąd za pomocą docker service ps --no-trunc (nazwa kontenera):
C:\Program Files\Docker>docker service ps --no-trunc angry_liskov
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
dwsd6sjlwsgic5vrglhtxu178 angry_liskov.1 windows/servercore/iis@sha256:868bca7e89e1743792e15f78edb5a73070ef44eae6807dc3f05f9b94c23943d5 WIN-BSTMQDRQC2E Running Starting less than a second ago
y5blbdum70zoh1f6uhx5nxsfv \_ angry_liskov.1 windows/servercore/iis@sha256:868bca7e89e1743792e15f78edb5a73070ef44eae6807dc3f05f9b94c23943d5 WIN-BSTMQDRQC2E Shutdown Failed 39 seconds ago "starting container failed: container e7b5d3adba7e510569c18d8e55f7c689d7cb92be40a516c91b363e27f84604d0 encountered an error during CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101) extra info: {"SystemType":"Container","Name":"e7b5d3adba7e510569c18d8e55f7c689d7cb92be40a516c91b363e27f84604d0","Owner":"docker","VolumePath":"\\\\?\\Volume{2443d38a-1379-4bcf-a4b7-fc6ad4cd7b65}","IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\\ProgramData\\docker\\windowsfilter\\e7b5d3adba7e510569c18d8e55f7c689d7cb92be40a516c91b363e27f84604d0","Layers":[{"ID":"bcf2630f-ea95-529b-b33c-e5cdab0afdb4","Path":"C:\\ProgramData\\docker\\windowsfilter\\200235127f92416724ae1d53ed3fdc86d78767132d019bdda1e1192ee4cf3ae4"},{"ID":"e3ea10a8-4c2f-5b93-b2aa-720982f116f6","Path":"C:\\ProgramData\\docker\\windowsfilter\\0ccc9fa71a9f4c5f6f3bc8134fe3533e454e09f453de662cf99ab5d2106abbdc"},{"ID":"cff5391f-e481-593c-aff7-12e080c653ab","Path":"C:\\ProgramData\\docker\\windowsfilter\\a49576b24cd6ec4a26202871c36c0a2083d507394a3072186133131a72601a31"},{"ID":"499cb51e-b891-549a-b1f4-8a25a4665fbd","Path":"C:\\ProgramData\\docker\\windowsfilter\\fdf2f52c4323c62f7ff9b031c0bc3af42cf5fba91098d51089d039fb3e834c08"},{"ID":"1532b584-8431-5b5a-8735-5e1b4fe9c2a9","Path":"C:\\ProgramData\\docker\\windowsfilter\\b2b88bc2a47abcc682e422507abbba9c9b6d826d34e67b9e4e3144cc125a1f80"},{"ID":"a64b8da5-cd6e-5540-bc73-d81acae6da54","Path":"C:\\ProgramData\\docker\\windowsfilter\\5caaedbced1f546bccd01c9d31ea6eea4d30701ebba7b95ee8faa8c098a6845a"}],"HostName":"e7b5d3adba7e","HvPartition":false,"EndpointList":["298bb656-8800-4948-a41c-1b0500f3d94c"],"AllowUnqualifiedDNSQuery":true}"
Jest to ten sam błąd co CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101)
.
Poprawka — aktualizowanie usługi w celu używania zgodnej wersji
Istnieją dwa zagadnienia dotyczące platformy Docker Swarm. W przypadku, gdy masz plik Compose, który ma usługę korzystającą z obrazu, którego nie utworzyłeś, należy odpowiednio zaktualizować odniesienie. Na przykład:
version: '3'
services:
YourServiceName:
image: windows/servercore:1709
...
Drugą kwestią jest to, że obraz wskazywany przez Ciebie jest taki, który został utworzony samodzielnie (na przykład contoso/myimage):
version: '3'
services:
YourServiceName:
image: contoso/myimage
...
W takim przypadku należy użyć metody opisanej w Błędy z niedopasowanych wersji, aby zmodyfikować ten plik dockerfile zamiast wiersza docker-compose.
Środki zaradcze — używanie izolacji Hyper-V w usłudze Docker Swarm
Kontenery systemu Windows obsługują używanie izolacji Hyper-V dla poszczególnych kontenerów, co wymaga zmiany konfiguracji usługi Docker, a następnie ponownego uruchomienia silnika Docker.
Edycja
C:\ProgramData\docker\config\daemon.json
Dodaj wiersz z
"exec-opts":["isolation=hyperv"]
Notatka
Plik daemon.json nie istnieje domyślnie. Jeśli okaże się, że tak jest, gdy zajrzysz do katalogu, musisz utworzyć plik. Następnie należy skopiować następujące elementy:
{ "exec-opts":["isolation=hyperv"] }
Zamknij i zapisz plik, a następnie uruchom ponownie silnik Docker, uruchamiając następujące cmdlety w programie PowerShell.
Stop-Service docker Start-Service docker
Po ponownym uruchomieniu usługi uruchom kontenery. Po uruchomieniu możesz sprawdzić poziom izolacji kontenera, sprawdzając kontener za pomocą następującego polecenia cmdlet:
docker inspect --format='{{json .HostConfig.Isolation}}' $instanceNameOrId
Zostanie zwrócona wartość "process" lub "hyperv". Jeśli zmodyfikowałeś i ustawiłeś daemon.json zgodnie z powyższym opisem, powinno to pokazać to drugie.
Środki zaradcze — używanie etykiet i ograniczeń
Poniżej przedstawiono sposób używania etykiet i ograniczeń w celu dopasowania ich do wersji:
Dodaj etykiety do każdego węzła.
W każdym węźle dodaj dwie etykiety:
OS
iOsVersion
. Zakłada się, że działasz lokalnie, ale można go zmodyfikować, aby ustawić je na hoście zdalnym.docker node update --label-add OS="windows" $ENV:COMPUTERNAME docker node update --label-add OsVersion="$((Get-ComputerInfo).OsVersion)" $ENV:COMPUTERNAME
Następnie możesz je sprawdzić, uruchamiając polecenie docker inspect, które powinno zawierać nowo dodane etykiety:
"Spec": { "Labels": { "OS": "windows", "OsVersion": "10.0.16296" }, "Role": "manager", "Availability": "active" }
Dodaj ograniczenie usługi.
Po oznaczeniu każdego węzła etykietą możesz zaktualizować ograniczenia określające rozmieszczenie usług. W poniższym przykładzie zastąp ciąg "contoso_service" nazwą rzeczywistej usługi:
docker service update \ --constraint-add "node.labels.OS == windows" \ --constraint-add "node.labels.OsVersion == $((Get-ComputerInfo).OsVersion)" \ contoso_service
Określa i ogranicza miejsca, gdzie węzeł może działać.
Aby dowiedzieć się więcej na temat używania ograniczeń usługi, możesz zapoznać się z dokumentacją referencyjną do tworzenia usługi .
Pasujące wersje przy użyciu platformy Kubernetes
Ten sam problem opisany w Matching versions using Docker Swarm może wystąpić, gdy pody są przydzielane w Kubernetes. Ten problem można uniknąć przy użyciu podobnych strategii:
- Odtwórz kontener w oparciu o tę samą wersję systemu operacyjnego zarówno w środowisku deweloperskim, jak i produkcyjnym. Aby dowiedzieć się, jak to zrobić, zapoznaj się z sekcją Wybieranie wersji systemu operacyjnego kontenera do użycia.
- Użyj etykiet węzłów i wybieraków węzłów, aby upewnić się, że zasobniki są przydzielone na zgodnych węzłach, jeśli w jednym klastrze znajdują się zarówno węzły Windows Server 2016, jak i Windows Server w wersji 1709.
- Używanie oddzielnych klastrów na podstawie wersji systemu operacyjnego
Wyszukiwanie zasobników nie powiodło się z powodu niezgodności systemu operacyjnego
W tym przypadku wdrożenie obejmowało kapsułę, która została przydzielona do węzła z niezgodną wersją systemu operacyjnego i bez włączonej izolacji Hyper-V.
Ten sam błąd jest wyświetlany w zdarzeniach wymienionych z kubectl describe pod <podname>
. Po kilku próbach stan poda będzie prawdopodobnie CrashLoopBackOff
.
$ kubectl -n plang describe pod fabrikamfiber.web-789699744-rqv6p
Name: fabrikamfiber.web-789699744-rqv6p
Namespace: plang
Node: 38519acs9011/10.240.0.6
Start Time: Mon, 09 Oct 2017 19:40:30 +0000
Labels: io.kompose.service=fabrikamfiber.web
pod-template-hash=789699744
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"plang","name":"fabrikamfiber.web-789699744","uid":"b5062a08-ad29-11e7-b16e-000d3a...
Status: Running
IP: 10.244.3.169
Created By: ReplicaSet/fabrikamfiber.web-789699744
Controlled By: ReplicaSet/fabrikamfiber.web-789699744
Containers:
fabrikamfiberweb:
Container ID: docker://eab0151378308315ed6c31adf4ad9e31e6d65fd300e56e742757004a969a803a
Image: patricklang/fabrikamfiber.web:latest
Image ID: docker-pullable://patricklang/fabrikamfiber.web@sha256:562741016ce7d9a232a389449a4fd0a0a55aab178cf324144404812887250ead
Port: 80/TCP
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: ContainerCannotRun
Message: container eab0151378308315ed6c31adf4ad9e31e6d65fd300e56e742757004a969a803a encountered an error during CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101) extra info: {"SystemType":"Container","Name":"eab0151378308315ed6c31adf4ad9e31e6d65fd300e56e742757004a969a803a","Owner":"docker","IsDummy":false,"VolumePath":"\\\\?\\Volume{037b6606-bc9c-461f-ae02-829c28410798}","IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\\ProgramData\\docker\\windowsfilter\\eab0151378308315ed6c31adf4ad9e31e6d65fd300e56e742757004a969a803a","Layers":[{"ID":"f8bc427f-7aa3-59c6-b271-7331713e9451","Path":"C:\\ProgramData\\docker\\windowsfilter\\e206d2514a6265a76645b9d6b3dc6a78777c34dbf5da9fa2d564651645685881"},{"ID":"a6f35e41-a86c-5e4d-a19a-a6c2464bfb47","Path":"C:\\ProgramData\\docker\\windowsfilter\\0f21f1e28ef13030bbf0d87cbc97d1bc75f82ea53c842e9a3250a2156ced12d5"},{"ID":"4f624ca7-2c6d-5c42-b73f-be6e6baf2530","Path":"C:\\ProgramData\\docker\\windowsfilter\\4d9e2ad969fbd74fd58c98b5ab61e55a523087910da5200920e2b6f641d00c67"},{"ID":"88e360ff-32af-521d-9a3f-3760c12b35e2","Path":"C:\\ProgramData\\docker\\windowsfilter\\9e16a3d53d3e9b33344a6f0d4ed34c8a46448ee7636b672b61718225b8165e6e"},{"ID":"20f1a4e0-a6f3-5db3-9bf2-01fd3e9e855a","Path":"C:\\ProgramData\\docker\\windowsfilter\\7eec7f59f9adce38cc0a6755da58a3589287d920d37414b5b21b5b543d910461"},{"ID":"c2b3d728-4879-5343-a92a-b735752a4724","Path":"C:\\ProgramData\\docker\\windowsfilter\\8ed04b60acc0f65f541292a9e598d5f73019c8db425f8d49ea5819eab16a42f3"},{"ID":"2973e760-dc59-5800-a3de-ab9d93be81e5","Path":"C:\\ProgramData\\docker\\windowsfilter\\cc71305d45f09ce377ef497f28c3a74ee027c27f20657d2c4a5f157d2457cc75"},{"ID":"454a7d36-038c-5364-8a25-fa84091869d6","Path":"C:\\ProgramData\\docker\\windowsfilter\\9e8cde1ce8f5de861a5f22841f1ab9bc53d5f606d06efeacf5177f340e8d54d0"},{"ID":"9b748c8c-69eb-55fb-a1c1-5688cac4efd8","Path":"C:\\ProgramData\\docker\\windowsfilter\\8e02bf5404057055a71d542780a2bb2731be4b3707c01918ba969fb4d83b98ec"},{"ID":"bfde5c26-b33f-5424-9405-9d69c2fea4d0","Path":"C:\\ProgramData\\docker\\windowsfilter\\77483cedfb0964008c33d92d306734e1fab3b5e1ebb27e898f58ccfd108108f2"},{"ID":"bdabfbf5-80d1-57f1-86f3-448ce97e2d05","Path":"C:\\ProgramData\\docker\\windowsfilter\\aed2ebbb31ad24b38ee8521dd17744319f83d267bf7f360bc177e27ae9a006cf"},{"ID":"ad9b34f2-dcee-59ea-8962-b30704ae6331","Path":"C:\\ProgramData\\docker\\windowsfilter\\d44d3a675fec1070b61d6ea9bacef4ac12513caf16bd6453f043eed2792f75d8"}],"HostName":"fabrikamfiber.web-789699744-rqv6p","MappedDirectories":[{"HostPath":"c:\\var\\lib\\kubelet\\pods\\b50f0027-ad29-11e7-b16e-000d3afd2878\\volumes\\kubernetes.io~secret\\default-token-rw9dn","ContainerPath":"c:\\var\\run\\secrets\\kubernetes.io\\serviceaccount","ReadOnly":true,"BandwidthMaximum":0,"IOPSMaximum":0}],"HvPartition":false,"EndpointList":null,"NetworkSharedContainerName":"586870f5833279678773cb700db3c175afc81d557a75867bf39b43f985133d13","Servicing":false,"AllowUnqualifiedDNSQuery":false}
Exit Code: 128
Started: Mon, 09 Oct 2017 20:27:08 +0000
Finished: Mon, 09 Oct 2017 20:27:08 +0000
Ready: False
Restart Count: 10
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-rw9dn (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
default-token-rw9dn:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-rw9dn
Optional: false
QoS Class: BestEffort
Node-Selectors: beta.kubernetes.io/os=windows
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
49m 49m 1 default-scheduler Normal Scheduled Successfully assigned fabrikamfiber.web-789699744-rqv6p to 38519acs9011
49m 49m 1 kubelet, 38519acs9011 Normal SuccessfulMountVolume MountVolume.SetUp succeeded for volume "default-token-rw9dn"
29m 29m 1 kubelet, 38519acs9011 spec.containers{fabrikamfiberweb} Warning Failed Failed to pull image "patricklang/fabrikamfiber.web:latest": rpc error: code = 2 desc = Error response from daemon: {"message":"Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: no such host"}
49m 3m 12 kubelet, 38519acs9011 spec.containers{fabrikamfiberweb} Normal Pulling pulling image "patricklang/fabrikamfiber.web:latest"
33m 3m 11 kubelet, 38519acs9011 spec.containers{fabrikamfiberweb} Normal Pulled Successfully pulled image "patricklang/fabrikamfiber.web:latest"
33m 3m 11 kubelet, 38519acs9011 spec.containers{fabrikamfiberweb} Normal Created Created container
33m 2m 11 kubelet, 38519acs9011 spec.containers{fabrikamfiberweb} Warning Failed Error: failed to start container "fabrikamfiberweb": Error response from daemon: {"message":"container fabrikamfiberweb encountered an error during CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101) extra info: {\"SystemType\":\"Container\",\"Name\":\"fabrikamfiberweb\",\"Owner\":\"docker\",\"IsDummy\":false,\"VolumePath\":\"\\\\\\\\?\\\\Volume{037b6606-bc9c-461f-ae02-829c28410798}\",\"IgnoreFlushesDuringBoot\":true,\"LayerFolderPath\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\fabrikamfiberweb\",\"Layers\":[{\"ID\":\"f8bc427f-7aa3-59c6-b271-7331713e9451\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\e206d2514a6265a76645b9d6b3dc6a78777c34dbf5da9fa2d564651645685881\"},{\"ID\":\"a6f35e41-a86c-5e4d-a19a-a6c2464bfb47\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\0f21f1e28ef13030bbf0d87cbc97d1bc75f82ea53c842e9a3250a2156ced12d5\"},{\"ID\":\"4f624ca7-2c6d-5c42-b73f-be6e6baf2530\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\4d9e2ad969fbd74fd58c98b5ab61e55a523087910da5200920e2b6f641d00c67\"},{\"ID\":\"88e360ff-32af-521d-9a3f-3760c12b35e2\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\9e16a3d53d3e9b33344a6f0d4ed34c8a46448ee7636b672b61718225b8165e6e\"},{\"ID\":\"20f1a4e0-a6f3-5db3-9bf2-01fd3e9e855a\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\7eec7f59f9adce38cc0a6755da58a3589287d920d37414b5b21b5b543d910461\"},{\"ID\":\"c2b3d728-4879-5343-a92a-b735752a4724\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\8ed04b60acc0f65f541292a9e598d5f73019c8db425f8d49ea5819eab16a42f3\"},{\"ID\":\"2973e760-dc59-5800-a3de-ab9d93be81e5\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\cc71305d45f09ce377ef497f28c3a74ee027c27f20657d2c4a5f157d2457cc75\"},{\"ID\":\"454a7d36-038c-5364-8a25-fa84091869d6\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\9e8cde1ce8f5de861a5f22841f1ab9bc53d5f606d06efeacf5177f340e8d54d0\"},{\"ID\":\"9b748c8c-69eb-55fb-a1c1-5688cac4efd8\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\8e02bf5404057055a71d542780a2bb2731be4b3707c01918ba969fb4d83b98ec\"},{\"ID\":\"bfde5c26-b33f-5424-9405-9d69c2fea4d0\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\77483cedfb0964008c33d92d306734e1fab3b5e1ebb27e898f58ccfd108108f2\"},{\"ID\":\"bdabfbf5-80d1-57f1-86f3-448ce97e2d05\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\aed2ebbb31ad24b38ee8521dd17744319f83d267bf7f360bc177e27ae9a006cf\"},{\"ID\":\"ad9b34f2-dcee-59ea-8962-b30704ae6331\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\d44d3a675fec1070b61d6ea9bacef4ac12513caf16bd6453f043eed2792f75d8\"}],\"HostName\":\"fabrikamfiber.web-789699744-rqv6p\",\"MappedDirectories\":[{\"HostPath\":\"c:\\\\var\\\\lib\\\\kubelet\\\\pods\\\\b50f0027-ad29-11e7-b16e-000d3afd2878\\\\volumes\\\\kubernetes.io~secret\\\\default-token-rw9dn\",\"ContainerPath\":\"c:\\\\var\\\\run\\\\secrets\\\\kubernetes.io\\\\serviceaccount\",\"ReadOnly\":true,\"BandwidthMaximum\":0,\"IOPSMaximum\":0}],\"HvPartition\":false,\"EndpointList\":null,\"NetworkSharedContainerName\":\"586870f5833279678773cb700db3c175afc81d557a75867bf39b43f985133d13\",\"Servicing\":false,\"AllowUnqualifiedDNSQuery\":false}"}
33m 11s 151 kubelet, 38519acs9011 Warning FailedSync Error syncing pod
32m 11s 139 kubelet, 38519acs9011 spec.containers{fabrikamfiberweb} Warning BackOff Back-off restarting failed container
Łagodzenie — używanie etykiet węzłów i selektora węzłów
Uruchom polecenie kubectl get node, aby uzyskać listę wszystkich węzłów. Następnie możesz uruchomić kubectl describe node (nazwa węzła), aby uzyskać więcej szczegółów.
W poniższym przykładzie dwa węzły systemu Windows mają różne wersje:
$ kubectl get node
NAME STATUS AGE VERSION
38519acs9010 Ready 21h v1.7.7-7+e79c96c8ff2d8e
38519acs9011 Ready 4h v1.7.7-25+bc3094f1d650a2
k8s-linuxpool1-38519084-0 Ready 21h v1.7.7
k8s-master-38519084-0 Ready 21h v1.7.7
$ kubectl describe node 38519acs9010
Name: 38519acs9010
Role:
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/instance-type=Standard_D2_v2
beta.kubernetes.io/os=windows
failure-domain.beta.kubernetes.io/region=westus2
failure-domain.beta.kubernetes.io/zone=0
kubernetes.io/hostname=38519acs9010
Annotations: node.alpha.kubernetes.io/ttl=0
volumes.kubernetes.io/controller-managed-attach-detach=true
Taints: <none>
CreationTimestamp: Fri, 06 Oct 2017 01:41:02 +0000
...
System Info:
Machine ID: 38519acs9010
System UUID:
Boot ID:
Kernel Version: 10.0 14393 (14393.1715.amd64fre.rs1_release_inmarket.170906-1810)
OS Image:
Operating System: windows
Architecture: amd64
...
$ kubectl describe node 38519acs9011
Name: 38519acs9011
Role:
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/instance-type=Standard_DS1_v2
beta.kubernetes.io/os=windows
failure-domain.beta.kubernetes.io/region=westus2
failure-domain.beta.kubernetes.io/zone=0
kubernetes.io/hostname=38519acs9011
Annotations: node.alpha.kubernetes.io/ttl=0
volumes.kubernetes.io/controller-managed-attach-detach=true
Taints: <none>
CreationTimestamp: Fri, 06 Oct 2017 18:13:25 +0000
Conditions:
...
System Info:
Machine ID: 38519acs9011
System UUID:
Boot ID:
Kernel Version: 10.0 16299 (16299.0.amd64fre.rs3_release.170922-1354)
OS Image:
Operating System: windows
Architecture: amd64
...
Użyjmy tego przykładu, aby pokazać, jak dopasować wersje:
Zanotuj każdą nazwę węzła i
Kernel Version
z informacji systemowych.W naszym przykładzie informacje będą wyglądać następująco:
Nazwa Wersja 38519acs9010 14393.1715.amd64fre.rs1_release_inmarket.170906-1810 38519acs9011 16299.0.amd64fre.rs3_release.170922-1354 Dodaj etykietę do każdego węzła o nazwie
beta.kubernetes.io/osbuild
. System Windows Server 2016 wymaga wspierania zarówno głównych, jak i pomocniczych wersji (14393.1715 w tym przykładzie) bez izolacji Hyper-V. System Windows Server w wersji 1709 wymaga jedynie dopasowania głównej wersji (w tym przykładzie 16299).W tym przykładzie polecenie dodawania etykiet wygląda następująco:
$ kubectl label node 38519acs9010 beta.kubernetes.io/osbuild=14393.1715 node "38519acs9010" labeled $ kubectl label node 38519acs9011 beta.kubernetes.io/osbuild=16299 node "38519acs9011" labeled
Sprawdź, czy etykiety są obecne, uruchamiając polecenie kubectl get nodes --show-labels.
W tym przykładzie dane wyjściowe będą wyglądać następująco:
$ kubectl get nodes --show-labels NAME STATUS AGE VERSION LABELS 38519acs9010 Ready,SchedulingDisabled 3d v1.7.7-7+e79c96c8ff2d8e beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=Standard_D2_v2,beta.kubernetes.io/os=windows,beta.kubernetes.io/osbuild=14393.1715,failure-domain.beta.kubernetes.io/region=westus2,failure-domain.beta.kubernetes.io/zone=0,kubernetes.io/hostname=38519acs9010 38519acs9011 Ready 3d v1.7.7-25+bc3094f1d650a2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=Standard_DS1_v2,beta.kubernetes.io/os=windows,beta.kubernetes.io/osbuild=16299,failure-domain.beta.kubernetes.io/region=westus2,failure-domain.beta.kubernetes.io/zone=0,kubernetes.io/hostname=38519acs9011 k8s-linuxpool1-38519084-0 Ready 3d v1.7.7 agentpool=linuxpool1,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=Standard_D2_v2,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=westus2,failure-domain.beta.kubernetes.io/zone=0,kubernetes.io/hostname=k8s-linuxpool1-38519084-0,kubernetes.io/role=agent k8s-master-38519084-0 Ready 3d v1.7.7 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=Standard_D2_v2,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=westus2,failure-domain.beta.kubernetes.io/zone=0,kubernetes.io/hostname=k8s-master-38519084-0,kubernetes.io/role=master
Dodaj selektory węzłów do konfiguracji wdrożeń. W tym przykładzie dodamy
nodeSelector
do specyfikacji kontenera zbeta.kubernetes.io/os
= windows ibeta.kubernetes.io/osbuild
= 14393.* lub 16299, aby dopasować podstawowy system operacyjny używany przez kontener.Oto pełny przykład uruchamiania kontenera utworzonego dla systemu Windows Server 2016:
apiVersion: extensions/v1beta1 kind: Deployment metadata: annotations: kompose.cmd: kompose convert -f docker-compose-combined.yml kompose.version: 1.2.0 (99f88ef) creationTimestamp: null labels: io.kompose.service: fabrikamfiber.web name: fabrikamfiber.web spec: replicas: 1 strategy: {} template: metadata: creationTimestamp: null labels: io.kompose.service: fabrikamfiber.web spec: containers: - image: patricklang/fabrikamfiber.web:latest name: fabrikamfiberweb ports: - containerPort: 80 resources: {} restartPolicy: Always nodeSelector: "beta.kubernetes.io/os": windows "beta.kubernetes.io/osbuild": "14393.1715" status: {}
Zasobnik może teraz działać przy użyciu zaktualizowanego wdrożenia. Selektory węzłów są również wyświetlane w
kubectl describe pod <podname>
, dzięki czemu można wykonać to polecenie w celu weryfikacji ich dodania.Dane wyjściowe dla naszego przykładu są następujące:
$ kubectl -n plang describe po fa Name: fabrikamfiber.web-1780117715-5c8vw Namespace: plang Node: 38519acs9010/10.240.0.4 Start Time: Tue, 10 Oct 2017 01:43:28 +0000 Labels: io.kompose.service=fabrikamfiber.web pod-template-hash=1780117715 Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"plang","name":"fabrikamfiber.web-1780117715","uid":"6a07aaf3-ad5c-11e7-b16e-000d3... Status: Running IP: 10.244.1.84 Created By: ReplicaSet/fabrikamfiber.web-1780117715 Controlled By: ReplicaSet/fabrikamfiber.web-1780117715 Containers: fabrikamfiberweb: Container ID: docker://c94594fb53161f3821cf050d9af7546991aaafbeab41d333d9f64291327fae13 Image: patricklang/fabrikamfiber.web:latest Image ID: docker-pullable://patricklang/fabrikamfiber.web@sha256:562741016ce7d9a232a389449a4fd0a0a55aab178cf324144404812887250ead Port: 80/TCP State: Running Started: Tue, 10 Oct 2017 01:43:42 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-rw9dn (ro) Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: default-token-rw9dn: Type: Secret (a volume populated by a Secret) SecretName: default-token-rw9dn Optional: false QoS Class: BestEffort Node-Selectors: beta.kubernetes.io/os=windows beta.kubernetes.io/osbuild=14393.1715 Tolerations: <none> Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 5m 5m 1 default-scheduler Normal Scheduled Successfully assigned fabrikamfiber.web-1780117715-5c8vw to 38519acs9010 5m 5m 1 kubelet, 38519acs9010 Normal SuccessfulMountVolume MountVolume.SetUp succeeded for volume "default-token-rw9dn" 5m 5m 1 kubelet, 38519acs9010 spec.containers{fabrikamfiberweb} Normal Pulling pulling image "patricklang/fabrikamfiber.web:latest" 5m 5m 1 kubelet, 38519acs9010 spec.containers{fabrikamfiberweb} Normal Pulled Successfully pulled image "patricklang/fabrikamfiber.web:latest" 5m 5m 1 kubelet, 38519acs9010 spec.containers{fabrikamfiberweb} Normal Created Created container 5m 5m 1 kubelet, 38519acs9010 spec.containers{fabrikamfiberweb} Normal Started Started container