如何在 Docker 中安装字体?

Jon*_*nas 6 google-chrome chromeless docker alpine-linux

如何安装所有语言的字体?这就是我所做的,但 Chrome 中没有日文字体。

来自这张图片:https : //github.com/Zenika/alpine-chrome/blob/master/Dockerfile

FROM zenika/alpine-chrome

USER root

RUN apk add --no-cache msttcorefonts-installer fontconfig
RUN update-ms-fonts

# Installs latest Chromium package.
RUN apk add --no-cache \
    msttcorefonts-installer fontconfig \
    font-noto \
    font-noto-adlam \
    font-noto-adlamunjoined \
    font-noto-arabic \
    font-noto-armenian \
    font-noto-avestan \
    font-noto-bamum \
    font-noto-bengali \
    font-noto-buhid \
    font-noto-carian \
    font-noto-chakma \
    font-noto-cherokee \
    font-noto-cypriot \
    font-noto-deseret \
    font-noto-devanagari \
    font-noto-ethiopic \
    font-noto-extra \
    font-noto-georgian \
    font-noto-glagolitic \
    font-noto-gothic \
    font-noto-gujarati \
    font-noto-gurmukhi \
    font-noto-hebrew \
    font-noto-kannada \
    font-noto-kayahli \
    font-noto-khmer \
    font-noto-lao \
    font-noto-lisu \
    font-noto-malayalam \
    font-noto-mandaic \
    font-noto-myanmar \
    font-noto-nko \
    font-noto-olchiki \
    font-noto-oldturkic \
    font-noto-oriya \
    font-noto-osage \
    font-noto-osmanya \
    font-noto-shavian \
    font-noto-sinhala \
    font-noto-tamil \
    font-noto-telugu \
    font-noto-thaana \
    font-noto-thai \
    font-noto-tibetan \
    font-noto-tifinagh \
    font-noto-vai \
    terminus-font \
    ttf-opensans \
    font-bakoma \
    font-misc-misc \
    font-croscore

RUN fc-cache -f && rm -rf /var/cache/*

USER chrome

Run Code Online (Sandbox Code Playgroud)

Jon*_*nas 8

我的解决方案是下载 Google 字体并手动安装。图像大小增加到 1GB。

FROM zenika/alpine-chrome

USER root

RUN apk add --no-cache msttcorefonts-installer fontconfig
RUN update-ms-fonts

# Google fonts
RUN wget https://github.com/google/fonts/archive/master.tar.gz -O gf.tar.gz
RUN tar -xf gf.tar.gz
RUN mkdir -p /usr/share/fonts/truetype/google-fonts
RUN find $PWD/fonts-master/ -name "*.ttf" -exec install -m644 {} /usr/share/fonts/truetype/google-fonts/ \; || return 1
RUN rm -f gf.tar.gz
RUN fc-cache -f && rm -rf /var/cache/*

USER chrome
Run Code Online (Sandbox Code Playgroud)

  • 您应该接受自己的答案:-) 另外,通过使用“docker build --squash”构建映像,您可能会得到很好的节省,因此删除的文件实际上会从 Docker 存储中清除 (3认同)
  • 工作起来就像一个魅力:)只有存档文件名似乎从“master”更改为“main”。所以我所要做的就是将 URL 更改为:https://github.com/google/fonts/archive/main.tar.gz (2认同)

Era*_*han 7

已接受答案中下载 google 字体的 URL 已更改。新网址应该是,

https://github.com/google/fonts/archive/master.tar.gz --> https://github.com/google/fonts/archive/main.tar.gz

新目录应该是, $PWD/fonts-master/--> $PWD/fonts-main/

因此在 Docker 文件中,它应该是;

RUN wget https://github.com/google/fonts/archive/main.tar.gz -O gf.tar.gz
RUN tar -xf gf.tar.gz
RUN mkdir -p /usr/share/fonts/truetype/google-fonts
RUN find $PWD/fonts-main/ -name "*.ttf" -exec install -m644 {} /usr/share/fonts/truetype/google-fonts/ \; || return 1
RUN rm -f gf.tar.gz
RUN fc-cache -f && rm -rf /var/cache/*
Run Code Online (Sandbox Code Playgroud)

我对上述脚本进行了以下更改:

  • RUN在 Docker 中使用较少的操作来限制构建步骤。
  • 删除提取的字体目录$PWD/fonts-main,否则会占用 google 字体两倍的空间。
  • 交换命令,RUN fc-cache -f && rm -rf /var/cache/*因为在构建字体缓存后清除应用程序缓存对我来说没有多大意义。

我最后想到的是,

RUN wget https://github.com/google/fonts/archive/main.tar.gz -O gf.tar.gz && \
  tar -xf gf.tar.gz && \
  mkdir -p /usr/share/fonts/truetype/google-fonts && \
  find $PWD/fonts-main/ -name "*.ttf" -exec install -m644 {} /usr/share/fonts/truetype/google-fonts/ \; || return 1 && \
  rm -f gf.tar.gz && \
  # Remove the extracted fonts directory
  rm -rf $PWD/fonts-main && \
  # Remove the following line if you're installing more applications after this RUN command and you have errors while installing them
  rm -rf /var/cache/* && \
  fc-cache -f
Run Code Online (Sandbox Code Playgroud)

干杯!!!