在运行 Ubuntu 18.04 的 Docker 容器上安装字体

在运行 Ubuntu 18.04 的 Docker 容器上安装字体

我正在尝试在运行 Ubuntu 18.04 的 Docker 容器中安装字体(Dockerfile 继承自 Jupyter scipy 笔记本,它继承自基本 jupyter 映像,Dockerfile这里)。

我尝试了很多不同的事情,包括答案和其他建议。

我的 Dockerfile 看起来像

FROM jupyter/scipy-notebook

USER root

# bash instead of dash to use source
RUN ln -snf /bin/bash /bin/sh

# These require sudo so they must come before defining
# a user

# Font attempt
COPY GillSansMTPro-Medium.otf /usr/local/share/fonts
RUN fc-cache -f -v

# installing some pip packages

当我尝试在 matplotlib 中使用此字体时,看到以下错误: 错误信息

我尝试添加

RUN rm -fr ~/.cache/matplotlib

添加到我的 Dockerfile(上面显示的部分之后),因为我在网上看到这可以解决这个问题。但它也没有用。

此外,如果我导航到/usr/local/share/fonts,字体就会如预期的那样出现。

有什么想法可以解决这个问题吗?

答案1

我在 Docker 容器中运行的 Java 服务中使用自定义字体时遇到了类似的问题。基本上,有两种方法可以设置:

  1. 在构建图像时将字体添加到图像中,
  2. 在启动容器时附加一个带有字体的卷;

如果您计划将容器重复用于需要字体的不同应用,则第一种方式很有用。对于第二种方式,您可以准备一次环境(例如测试或生产环境),然后在不同的 Docker 容器(甚至是第三方容器)之间共享字体,而无需重建它们。

下面是一个如何准备环境然后临时附加字体的示例:

$ wget https://www.paratype.ru/uni/public/PTSans.zip \
 -O ~/.fonts/PTSans.zip
$ cd ~/.fonts 
$ unzip PTSans.zip
$ sudo cp -rfv .fonts /usr/share/fonts/
$ cd /usr/share/fonts/
$ sudo mv .fonts/ pt_sans/
$ cd pt_sans
$ fc-cache -fv
$ docker run -d --name reports \
  -v /usr/share/fonts/pt_sans:/usr/share/fonts/pt_sans \
  your-container/reports

确保您使用与您的案例相关的名称对其进行了更新。

还有一些细节描述本文

答案2

我以前也遇到过和你一样的情况。

这是我的 Docker 文件。希望这对你有帮助。

FROM jupyter/scipy-notebook

# create directory for cuistom.css and copy it.
RUN mkdir -p /home/jovyan/.jupyter/custom
COPY custom.css /home/jovyan/.jupyter/custom

# create font directory and copy the font
RUN mkdir -p /home/jovyan/.fonts
COPY D2Coding.ttf /home/jovyan/.fonts
COPY D2CodingBold.ttf /home/jovyan/.fonts

# refresh system font cache
RUN fc-cache -f -v

# refresh matplotlib font cache
RUN rm -fr ~/.cache/matplotlib

就我的情况来说,它是有效的。

相关内容