docker 容器无法直接读取宿主机文件

最近一个需求, 要在后端直接使用代码直接生成 pdf 文档, 由于使用的 apache 的工具包, 该工具包无法直接解析中文字体, 需要导入外部 中文插件包, 相关代码如下: 

            PDPage page = new PDPage(PDRectangle.A4);
            document.addPage(page);
            PDFont fontFile = PDType0Font.load(document, new File("/usr/share/fonts/sourcehansans.ttf"));
            PDPageContentStream contentStream = new PDPageContentStream(document, page);
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
</dependency>

最开始我使用的是容器所在的宿主机的文件目录:  /opt/fonts/sourcehansans.ttf, 代码如下,

但是出现了 java.io.FileNotFoundException

            PDPage page = new PDPage(PDRectangle.A4);
            document.addPage(page);
            PDFont fontFile = PDType0Font.load(document, new File("/opt/fonts/sourcehansans.ttf"));
            PDPageContentStream contentStream = new PDPageContentStream(document, page);

因为我忽略一个问题, 就是 :

在Docker中,容器和宿主机是隔离的,这意味着容器默认无法直接访问宿主机的文件系统。如果Java项目需要读取宿主机上的文件信息,不能直接从容器内部引用宿主机的文件路径,因为容器中不会有对应的文件和路径。要解决这个问题, 有一个最方便的方法: 

就是在 DockerFile 中, 使用 COPY 命令, 在每次构建镜像的时候, 把宿主机的文件打入 docker 镜像里面, 代码如下: 

这样构建镜像后, 容器的 /usr/share/fonts/sourcehansans.ttf 目录下就有该文件, pdf 工具包就可以读取到

其实也可以使用在 docker-comopose.yml 文件里, 使用 数据卷 挂载的方式, 标签如下, 详情可以参看其他大佬的博客

    volumes:
      - /opt/data/***/***:/var/lib/***/***

相关推荐

  1. 关于Mac宿主无法ping通Docker容器的问题

    2024-05-11 06:46:06       41 阅读
  2. Jenkins容器使用宿主Docker

    2024-05-11 06:46:06       46 阅读
  3. docker-宿主容器的命令执行方法

    2024-05-11 06:46:06       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 06:46:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 06:46:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 06:46:06       82 阅读
  4. Python语言-面向对象

    2024-05-11 06:46:06       91 阅读

热门阅读

  1. TensorFlow与PyTorch:哪个更适合深度学习项目?

    2024-05-11 06:46:06       31 阅读
  2. CentOS常见命令

    2024-05-11 06:46:06       29 阅读
  3. AI智能体|智谱清言开放了智能体API

    2024-05-11 06:46:06       30 阅读
  4. 【第66例】IPD体系进阶:华为IPD发展历程

    2024-05-11 06:46:06       33 阅读
  5. 百度智能云数据仓库 Palo 实战课程

    2024-05-11 06:46:06       33 阅读
  6. haproxy配置安装,实现web服务器负载均衡

    2024-05-11 06:46:06       33 阅读
  7. Zephyr 使用问题记录

    2024-05-11 06:46:06       28 阅读