如何添加字体到Windows Docker container/image?

How to add Fonts to Windows Docker container/image?

我有一个基于 .NET Framework v4.8 构建的控制台应用程序。我正在尝试使用 docker 图像在 Azure 容器实例 (ACI) 中 运行 它。我已经在本地创建了一个 docker 图像并将其推送到 ACI,它已成功 运行ning。

现在我面临一个问题。此应用程序发送一封包含 RDLC 报告的电子邮件。但是我在邮件中收到的报告的字体与我之前收到的报告的字体不同(没有 docker)。我发现我使用的基础 docker 图像 mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 没有加载字体。我需要在 docker image/container 中安装字体。我该怎么做?

下面是我的 Dockerfile 命令:

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019  AS BASE
COPY . .
ENTRYPOINT BackgroundService.exe

我做了一些调查,找到了一种使用 Dockerfile 将字体添加到容器的方法。我们需要在 docker 行下面 file:

COPY arial*.ttf c:/windows/fonts/

以下是更新后的 Dockerfile:

# app image
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019  AS BASE
COPY arial*.ttf c:/windows/fonts/
COPY . .
ENTRYPOINT BackgroundService.exe

如果我们只需要将字体添加到容器而不是图像,以下解决方案可能会有所帮助:

docker run -dit --name "my-chromium-agent" my-agent-image:latest `
  -v C:\Windows\Fonts:C:\Windows\Fonts

注意:直接将本地系统的Fonts文件夹挂载到容器中可能存在安全风险。

如果您在 Windows servercore 1909 docker 图像上使用 Chromium 时出现以下错误,上述解决方案将有所帮助:

15 09 2021 08:54:11.665:INFO [launcher]: Starting browser Chrome 15 09 2021 08:54:12.400:ERROR [launcher]: Cannot start Chrome [0915/085411.853:ERROR:network_change_notifier_win.cc(228)] WSALookupServiceBegin failed with: 0

DevTools listening on ws://127.0.0.1:9222/devtools/browser/46bdbf30-8381-473a-9816-a5ad56f9c71a [0915/085411.978:ERROR:platform_font_skia.cc(344)] Could not find any font: Segoe UI, sans. Falling back to the default

在文档 (link) 中注意以下句子可能也很重要:

If you only copy the font into the %windir%\fonts folder, the font will be available only after the system is rebooted.