docker 在Linux容器中为ASP.NET核心安装字体

nbnkbykc  于 2023-03-17  发布在  Docker
关注(0)|答案(4)|浏览(401)

在VisualStudio中,我创建了一个默认的ASP.NETCoreWeb应用程序,并启用了Docker支持。
它使用的是Linux容器的默认Microsoft Offical image
下面是我的 Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["WebApplication1.csproj", ""]
RUN dotnet restore "./WebApplication1.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

我想在上面安装 Microsoft Windows Fonts,我尝试了以下方法,但不起作用:

RUN apt install ttf-mscorefonts-installer

如何在此容器上安装字体?

kknvjkwl

kknvjkwl1#

明白了。修改你的Dockerfile的开头如下:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base

#Add these two lines
RUN sed -i'.bak' 's/$/ contrib/' /etc/apt/sources.list
RUN apt-get update; apt-get install -y ttf-mscorefonts-installer fontconfig

WORKDIR /app
EXPOSE 80
[...]

第一行更新Linux操作系统中默认的 /etc/apt/sources.list 文件,使其包含'contrib'归档区(ttf-mscorefonts-installer所在的区域),这确保apt-get可以找到它,并在第二行正常安装它(沿着fontconfig,您也需要它)。
为了记录在案,this page建议使用“fonts-liberation”包而不是ttf-mscorefonts-installer,您也可以在Dockerfile的开头使用两个 * 不同 * 的行来获得ttf-mscorefonts-installer,如下所示:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base

#Add these two lines for fonts-liberation instead
RUN apt-get update; apt-get install -y fontconfig fonts-liberation
RUN fc-cache -f -v

WORKDIR /app
EXPOSE 80

[...]
yks3o0rb

yks3o0rb2#

你可以复制你的自定义字体到docker图像和安装字体象这样

RUN apt-get -y install fontconfig
COPY /fonts ~/.fonts
COPY /fonts /usr/shared/fonts
COPY /fonts /usr/share/fonts/truetype
# refresh system font cache
RUN fc-cache -f -v

或者如果你想安装microsoft trueType核心字体.你可以这样做

RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | debconf-set-selections
RUN apt-get install -y --no-install-recommends fontconfig ttf-mscorefonts-installer
# refresh system font cache
RUN fc-cache -f -v

你可以使用这个示例dockerfile太DockerFile

prdp8dxp

prdp8dxp3#

我通过将字体(从我的Windows开发机器)添加到API项目下的./fonts文件夹中,然后在Dockerfile中复制并配置这些字体来解决这个问题:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base

# not sure we need all of these
RUN apt-get update; apt-get install -y libicu-dev libharfbuzz0b libfontconfig1 libfreetype6 fontconfig

...

RUN dotnet restore "Api/Api.csproj"
COPY . .
WORKDIR "/src/Api"
RUN dotnet build "Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Api.csproj" -c Release  -r linux-x64 -o /app/publish

FROM base AS final

WORKDIR /usr/share/fonts/truetype/ms
COPY --from=publish /app/publish/fonts .
RUN fc-cache -f -v

...

我想如果我可以使用字体而不必复制到/usr/share会更好。
尽管许多网站描述了这个过程,但我还是无法让ttf-mscorefonts-installer工作。

fumotvh3

fumotvh34#

使用linux alpine docker的工作示例,因为其他答案不起作用。Source

FROM alpine:latest
RUN apk --no-cache add msttcorefonts-installer fontconfig && \
    update-ms-fonts && \
    fc-cache -f

相关问题