Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Um die Gesamtleistung von Windows-Containern zu verbessern, haben wir viele Komponenten der Windows-Basiscontainerimages entfernt, einschließlich Komponenten wie Schriftarten – die in den meisten Fällen nicht relevant sind. Einige Szenarien benötigen diese Schriftarten jedoch möglicherweise, damit Anwendungen ordnungsgemäß funktionieren.
Vorbereiten der Umgebung
Als wir die Schriftarten aus dem Server Core-Basiscontainerimage entfernt haben, haben wir auch das Feature entfernt, das neue Schriftarten installiert. Beim Erstellen ihres Containerimages müssen Sie die folgenden Schritte einbeziehen, um das erforderliche Feature wieder Windows-Containern hinzuzufügen. Zunächst benötigen Sie einen aktuellen Windows Server 2019- oder 2022-Host oder einen virtuellen Computer als Containerhost. Für das Wiederherstellen entfernter Features sind aktuelle Medien erforderlich.
Hinweis
Es gibt einige Möglichkeiten, aktuelle Installationsmedien zu erwerben, aber am einfachsten ist es, eine Windows Server 2019 oder 2022 VM zu verwenden und von Windows Update auf den neuesten Stand bringen zu lassen. Außerdem benötigen Sie eine ISO der ursprünglichen Windows Server 2019 oder 2022 RTM-Medien. Dieses Image kann über ein Visual Studio-Abonnement oder das Volume License Service Center erworben werden.
Um Ihre Umgebung vorzubereiten, benötigen Sie einen ordnungsgemäß konfigurierten Windows-Containerhost und geben das Verzeichnis %windir%\WinSxS frei. Sie müssen auch das Verzeichnis %windir%\WinSxS freigeben. In diesem Beispiel haben wir einen lokalen Benutzer mit einem zufällig generierten Kennwort erstellt:
Zur Eingabeaufforderung:
net user ShareUser <password> /ADD
net share WinSxS=%windir%\WinSxS /grant:ShareUser,READ
Für PowerShell:
net user ShareUser ‘<password>’ /ADD
net share WinSxS=${env:windir}\WinSxS /grant:ShareUser,READ
Stellen Sie als Nächstes die RTM-Medien her.
Zur Eingabeaufforderung:
set imagePath=<path to RTM ISO>
powershell Mount-DiskImage -ImagePath %imagePath%
set driveLetter=<drive letter of the mounted ISO>
set repairMountDir=%SystemDrive%\repair
mkdir repairMountDir
dism /mount-image /imagefile:"%driveLetter%\sources\install.wim" /index:1 /mountdir:%repairMountDir%
net share RTM=%repairMountDir% /grant:ShareUser,READ
Mit PowerShell:
$imagePath = <path to RTM ISO>
Mount-DiskImage -ImagePath $imagePath
# Find the drive letter of the mounted ISO
$driveLetter = <drive letter of mounted ISO>
$repairMountDir = "${env:systemdrive}\repair"
mkdir $repairMountDir
dism /mount-image /imagefile:"$driveLetter\sources\install.wim" /index:1 /mountdir:$repairMountDir
net share RTM=$repairMountDir /grant:ShareUser,READ
Hinweis
Stellen Sie sicher, dass der Bildindex 1 beim Einbinden des RTM-Mediums angegeben ist.
Erstellen Sie als Nächstes eine Datei namens InstallFonts.cmd und fügen Sie den folgenden Inhalt hinzu:
REM Connect to the WinSxS share on the container host
for /f "tokens=3 delims=: " %%g in ('netsh interface ip show address ^| findstr /c:"Default Gateway"') do set GATEWAY=%%g
net use o: \\%GATEWAY%\WinSxS /user:ShareUser %SHARE_PW%
net use r: \\%GATEWAY%\RTM /user:ShareUser %SHARE_PW%if errorlevel 1 goto :eof
dism /online /enable-feature /featurename:ServerCoreFonts-NonCritical-Fonts-MinConsoleFonts /Source:O:\ /Source:R:\ /LimitAccess
dism /online /enable-feature /featurename:ServerCoreFonts-NonCritical-Fonts-Support /Source:O:\ /Source:R:\ /LimitAccess
dism /online /enable-feature /featurename:ServerCoreFonts-NonCritical-Fonts-BitmapFonts /Source:O:\ /Source:R:\ /LimitAccess
dism /online /enable-feature /featurename:ServerCoreFonts-NonCritical-Fonts-TrueType /Source:O:\ /Source:R:\ /LimitAccess
dism /online /enable-feature /featurename:ServerCoreFonts-NonCritical-Fonts-UAPFonts /Source:O:\ /Source:R:\ /LimitAccess
Jetzt können Sie den Kontext zu Ihrer Dockerfile-Datei hinzufügen. Hier ist ein Beispiel angegeben:
FROM mcr.microsoft.com/windows/servercore:ltsc2022
ARG SHARE_PW=
WORKDIR /install
COPY InstallFonts.cmd .
RUN InstallFonts.cmd
Mit einer Dockerfile-Datei können Sie Ihr Containerimage erstellen und markieren mithilfe von:
docker build -t <newname:tag> --build-arg SHARE_PW=<password> .
Sie erhalten die SHARE_PW in der Buildablaufverfolgung, aber wenn Sie es als zufällig generierte Zeichenfolge für jeden Build einrichten, entweicht kein echter Geheimschlüssel. Darüber hinaus können Sie nach Abschluss des Builds die Freigabe und den Benutzer bereinigen mithilfe von:
net share WinSxS /delete
net user ShareUser /delete
Ausführen der Arbeitsauslastung
Aufgrund einer Einschränkung, wie Schriftarten von Server Core-Container behandelt werden, müssen Sie Windows speziell über die neu verfügbaren Schriftarten im Container informieren. Sie müssen ein PowerShell-Skript ausführen, nachdem der Container gestartet wurde und bevor Sie Ihre Workload ausführen. Wir empfehlen, LoadFonts.ps1 aufzurufen:
$fontCSharpCode = @'
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
namespace FontResource
{
public class AddRemoveFonts
{
[DllImport("gdi32.dll")]
static extern int AddFontResource(string lpFilename);
public static int AddFont(string fontFilePath) {
try
{
return AddFontResource(fontFilePath);
}
catch
{
return 0;
}
}
}
}
'@
Add-Type $fontCSharpCode
foreach($font in $(gci C:\Windows\Fonts))
{
Write-Output "Loading $($font.FullName)"
[FontResource.AddRemoveFonts]::AddFont($font.FullName) | Out-Null
}
Microsoft hofft, diese Einschränkung in einer zukünftigen Version von Windows zu entfernen, aber das Skript ist für aktuelle Versionen von Windows Server 2019 und 2022 erforderlich. Nachdem Sie den Container wie hier beschrieben erstellt und dieses Skript im Container ausgeführt haben, sind alle Schriftarten, die unter Windows Server Core vorhanden sind, für Ihre containerisierte Workload verfügbar.
Probleme beim Hinzufügen von Schriftarten
Wenn beim Aktivieren von Schriftarten auf Server Core-Containerimages Probleme auftreten, teilen Sie uns dies im Abschnitt „Probleme“ unseres GitHub-Repositorys mit.