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

2024-05-10 23:04

本文主要是介绍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/***/***

这篇关于docker 容器无法直接读取宿主机文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977814

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

docker 重命名镜像的实现方法

《docker重命名镜像的实现方法》在Docker中无法直接重命名镜像,但可通过添加新标签、删除旧镜像后重新拉取/构建,或在DockerCompose中修改配置文件实现名称变更,感兴趣的可以了解一下... 目录使用标签(Tagging)删除旧的php镜像并重新拉取或构建使用docker Compose在Do

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

java读取excel文件为base64实现方式

《java读取excel文件为base64实现方式》文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意... 目录使用 Apache POI 读取 Excel 并转换为 Base64使用 EasyExcel 处

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

Spring Boot中获取IOC容器的多种方式

《SpringBoot中获取IOC容器的多种方式》本文主要介绍了SpringBoot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过Spring... 目录1. 直接注入ApplicationContext2. 实现ApplicationContextA