【问题标题】:How to add Fonts to Windows Docker container/image?如何将字体添加到 Windows Docker 容器/图像?
【发布时间】:2020-01-16 23:01:26
【问题描述】:
我有一个基于 .NET Framework v4.8 构建的控制台应用程序。我正在尝试使用 docker 映像在 Azure 容器实例(ACI)中运行它。我在本地创建了一个 docker 映像并将其推送到 ACI 并且它运行成功。
现在我面临一个问题。此应用程序会发送一封包含 RDLC 报告的电子邮件。但是我在邮件中收到的报告的字体与我之前收到的报告不同(没有 docker)。我发现我使用的基础 docker 镜像 mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 没有加载字体。我需要在我的 docker 镜像/容器中安装字体。我该怎么做?
以下是我的 Dockerfile 命令:
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 AS BASE
COPY . .
ENTRYPOINT BackgroundService.exe
【问题讨论】:
标签:
docker
containers
azure-container-instances
windows-container
.net-4.8
【解决方案1】:
我进行了一些调查,并找到了一种使用 Dockerfile 将字体添加到容器的方法。我们需要下面的 docker 文件:
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
【解决方案2】:
如果我们只需要将字体添加到容器而不是图像中,以下解决方案可能会有所帮助:
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 [启动器]:启动浏览器 Chrome
15 09 2021 08:54:12.400:ERROR [启动器]:无法启动 Chrome
[0915/085411.853:ERROR:network_change_notifier_win.cc(228)] WSALookupServiceBegin 失败:0
DevTools 监听 ws://127.0.0.1:9222/devtools/browser/46bdbf30-8381-473a-9816-a5ad56f9c71a
[0915/085411.978:ERROR:platform_font_skia.cc(344)] 找不到任何字体:Segoe UI,sans。回退到默认值
请注意文档中的以下句子 (link):
如果只将字体复制到 %windir%\fonts 文件夹中,则字体只有在系统重启后才能使用。