如何将字体添加到Windows Docker容器/镜像?

6
我有一个构建在.NET Framework v4.8上的控制台应用程序。我想使用Docker镜像在Azure容器实例(ACI)中运行它。我已经在本地创建了一个Docker镜像并将其推送到ACI,它正在成功运行。
现在我面临一个问题。这个应用程序发送带有RDLC报告的电子邮件。但是我在邮件中收到的报告与之前收到的报告的字体不同(没有使用docker时)。我发现我正在使用的基础Docker镜像没有加载字体。我需要在我的Docker镜像/容器中安装字体。如何做到这一点?
以下是我的Dockerfile命令:
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019  AS BASE
COPY . .
ENTRYPOINT BackgroundService.exe
2个回答

5

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

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

0
如果我们只需要将字体添加到容器而不是图像中,则以下解决方案可能有所帮助:
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):

如果你只是将字体复制到 %windir%\fonts 文件夹中,那么该字体只有在系统重新启动后才能使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接