V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KINGWAY
V2EX  ›  程序员

请教个 alpin docker 镜像字体问题

  •  
  •   KINGWAY · 176 天前 · 1154 次点击
    这是一个创建于 176 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我跑了个 invoice 系统基于 alpin docker 构建, dockerfile 中开发者说用的免费字体, 但我想预览中文, 请问如何可以做到在 container 中增加??

    参考 https://github.com/invoiceninja/invoiceninja/discussions/9545#discussioncomment-9552029

    第 1 条附言  ·  176 天前
    终于搞定了, 记录下, 供后面人避坑所用.

    1. alpine 这个镜像实在太小了, 里面很多必要的软件都没有, 什么都要自己去安装.我也不知道开发者是故意设置障碍不选择基于 debian/ubuntu 的镜像.

    2. 替换为国内源, 否则下载速度感人, 而且默认的源东西很少, 基本必要的东西你找不到,特娘的连 apk add nano 都没有 .
    此外一定要进 container 用自带 vi /etc/apk/repositories 添加, 参考网上 sed 之类替换根本无效.


    然后
    # 安装中文字体
    apk add --update ttf-dejavu fontconfig
    # 删除安装缓存
    rm -rf /var/cache/apk/*
    # 刷新字体
    mkfontscale && mkfontdir && fc-cache

    ----------------------------------
    我折腾了很久, 甚至都已经在镜像中安装 sshd 和 docker, 准备曲线救国 ssh 进去后, 直接上传 windows 下的 fonts 字体库上去, 只是因为该服务的 docker 内网地址是单独的网段, 我还要研究如何让宿主机下 docker 可以互相访问到, 那又要花费很多时间.
    12 条回复    2024-05-29 23:19:31 +08:00
    zed1018
        1
    zed1018  
       176 天前
    自己写 Dockerfile From 这个镜像用命令装然后 build 镜像再跑
    KINGWAY
        2
    KINGWAY  
    OP
       176 天前
    @zed1018 #1 build 太麻烦了,想直接进去 container 直接 apk add 来安装, 就是不知道当前中文字符字体哪里可以下载
    zed1018
        3
    zed1018  
       176 天前
    能直接包安装的字体少,加上 alpine 基本不会有人拿来做 DE ,你得自己找字体然后根据他们的文档安装
    KINGWAY
        4
    KINGWAY  
    OP
       176 天前
    @zed1018 #3 是啊,一般大家都用 debian/ubuntu 来做 de, 这个 invoice 系统用 alpine, 可能也是出于担心使用者随便进 containe 操作导致各种问题而选择的吧.

    想请教下 alpine 的 container 可以进去用 apk add 来安装字体吗? 因为折腾了一下午,还没找到 alpine 开通 ssh, 然后导入 windows 下 fonts 来解决.

    另外 alpine 容器进去远程下载速度非常慢, 找了一轮国内源, 也不太好用.
    wheat0r
        5
    wheat0r  
       176 天前
    @KINGWAY #4 你直接 docker exec -it container-name ash 进去试试呗
    KINGWAY
        7
    KINGWAY  
    OP
       176 天前
    @zim298247 #6 这个已经安装过了, 但是仍然显示中文乱码
    jalena
        8
    jalena  
       175 天前
    @KINGWAY 明确的告诉你,能!!!!
    jalena
        9
    jalena  
       175 天前
    ```Dockerfile
    FROM adoptopenjdk/openjdk8-openj9:alpine-slim

    LABEL maintainer="Jalena [email protected]"

    RUN mv /usr/glibc-compat/lib/ld-linux-x86-64.so.2 /usr/glibc-compat/lib/ld-linux-x86-64.so && \
    ln -s /usr/glibc-compat/lib/ld-linux-x86-64.so /usr/glibc-compat/lib/ld-linux-x86-64.so.2

    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
    apk --no-cache --update add tzdata fontconfig ttf-dejavu && \
    fc-cache --force && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

    COPY ./font /usr/share/fonts/win/
    ```

    参考这个,Windows 的字体在 build 时 copy 进去就行了
    tramm
        10
    tramm  
       175 天前
    我都是自己打个带字体的镜像作为基础镜像使用
    ```
    # Docker image for springboot file run
    # VERSION 0.0.1
    # 基础镜像使用 zulu-jre
    FROM azul/zulu-openjdk-alpine:17-jre

    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
    apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
    ```
    KINGWAY
        11
    KINGWAY  
    OP
       175 天前
    @jalena #9 谢谢, 已经搞定了, 和我 Append 的基本一致, 不同的是进容器后 sed -i 替换没用, 只能 vi 来编辑手动添加国内源.

    这最后一段这个是设置 locale 为国内嘛?

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

    COPY ./font /usr/share/fonts/win/ <---这段是直接复制 windows 下的字体到宿主机的影身目录嘛?
    jalena
        12
    jalena  
       172 天前
    @KINGWAY 是的!!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1146 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:32 · PVG 07:32 · LAX 15:32 · JFK 18:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.