dokcer 环境中集成LibreOffice

说明:

项目部署docker环境中,需集成libreoffice,记录步骤以备后用

一、Dockerfile(带国内源加速)

powershell 复制代码
# 基础镜像:Java 8 + 精简Debian系统(bullseye版本)
FROM openjdk:8-jre-slim

# 配置元信息
LABEL name="jsfz" version="20251212" author="hxkr"

# ========== 核心优化:替换为国内阿里云源(解决下载慢) ==========
RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib" > /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/debian-security/ bullseye-security main" >> /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >> /etc/apt/sources.list

# ========== 安装LibreOffice + 依赖 + 中文支持 ==========
RUN apt update && apt install -y \
    # LibreOffice核心套件(含Writer/Calc/Impress,支持格式转换)
    libreoffice \
    # 中文语言包(解决界面/文档中文乱码)
    libreoffice-l10n-zh-cn libreoffice-help-zh-cn \
    # LibreOffice运行依赖的系统库
    libx11-6 libxext6 libxrender1 libcups2 libfontconfig1 \
    # 中文字体(解决文档中文字符显示为方块)
    fonts-wqy-microhei fonts-wqy-zenhei fonts-noto-cjk \
    # 清理apt缓存,减小镜像体积
    && rm -rf /var/lib/apt/lists/*

# ========== 项目相关配置 ==========
# 设置JAR包路径变量(对应docker-compose的build args)
ARG JAR_PATH
ENV JAR_PATH ${JAR_PATH}

# 设置JAR包名称变量
ARG JAR_NAME
ENV JAR_NAME ${JAR_NAME}

# 设置配置文件路径变量
ARG CONFIG_PATH
ENV CONFIG_PATH ${CONFIG_PATH}

# 复制本地JAR包到容器
ADD ${JAR_PATH}/${JAR_NAME} ${JAR_NAME}

# 容器启动命令:运行JAR包并加载外部配置
ENTRYPOINT java -jar ${JAR_NAME} --spring.config.additional-location=${CONFIG_PATH}

二、docker-compose.yml

powershell 复制代码
version: '3.8'  # 指定compose版本(兼容主流Docker)
services:
  jsfz-pc:
    container_name: jsfz_pc  # 容器名称(固定)
    build:
      context: ./  # 构建上下文:当前目录(Dockerfile所在目录)
      args:
        JAR_PATH: jars  # 本地JAR包所在目录(当前目录下的jars文件夹)
        JAR_NAME: jeecg-boot-module-system-2.1.3.jar  # JAR包名称(替换为你的实际JAR名)
        CONFIG_PATH: /project/config/  # 容器内配置文件路径
    image: jsfz.pc:20251212  # 构建后的镜像名称+版本
    environment:
      TZ: Asia/Shanghai  # 时区配置(解决时间不一致)
    ports:
      - 8089:8089  # 端口映射:宿主机8089 → 容器内8089(若宿主机8089被占用,改宿主机端口如8090:8089)
    restart: always  # 容器异常退出时自动重启
    privileged: true  # 提升容器权限(解决LibreOffice权限问题)
    volumes:
      # 时区同步:宿主机时区 → 容器时区
      - /etc/localtime:/etc/localtime:ro
      # 配置文件挂载:本地config目录 → 容器内配置目录
      - ./config:/project/config
      # 业务文件挂载:本地opt目录 → 容器内opt目录(存放待转换的文档/输出文件)
      - ./opt:/opt
    # 可选:禁用安全策略(解决LibreOffice特殊权限问题)
    security_opt:
      - seccomp:unconfined

三、目录结构要求(必须匹配)

在执行构建前,确保本地目录结构如下:

powershell 复制代码
plaintext
你的项目根目录/
├── Dockerfile          # 上面的Dockerfile文件
├── docker-compose.yml  # 上面的compose文件
├── jars/               # JAR包目录
│   └── jeecg-boot-module-system-2.1.3.jar  # 你的JAR包(名称要和compose中一致)
├── config/             # 配置文件目录
│   └── application.yml # 你的项目配置文件(可多个)
└── opt/                # 文档存储目录(存放待转换的docx/pdf等)

四、完整执行步骤

准备文件:按上面的目录结构,将 Dockerfile、docker-compose.yml 放到项目根目录,JAR 包放入 jars 目录,配置文件放入 config 目录;

执行构建(首次构建稍慢,国内源已提速):

powershell 复制代码
cd 你的项目根目录
# 清除缓存并构建镜像(确保使用新配置)
docker-compose build --no-cache
启动容器:
bash
运行
docker-compose up -d
验证是否成功:
bash
运行
# 查看容器状态(UP表示运行中)
docker ps | grep jsfz_pc
# 进入容器验证LibreOffice
docker exec -it jsfz_pc libreoffice --version
# 查看容器日志(确认JAR包启动正常)
docker logs jsfz_pc

五、关键优化点说明

国内源加速:替换 Debian 官方源为阿里云源,LibreOffice 及依赖下载速度从几十 KB/s 提升到几 MB/s,构建时间缩短 80%;

全量依赖:包含 LibreOffice 运行所需的所有系统库、中文字体、中文语言包,解决 "找不到库""中文乱码""oosplash 缺失" 等问题;

权限适配:privileged: true + seccomp:unconfined 解决容器内 LibreOffice 权限不足问题;

数据持久化:配置文件、业务文档通过挂载目录持久化,容器重启后数据不丢失。

相关推荐
Bert.Cai2 分钟前
Linux cat命令详解
linux·运维
零二年的冬13 分钟前
epoll详解
java·linux·开发语言·c++·链表
问简24 分钟前
ubuntu 输入法优化
linux·运维·ubuntu
勤自省25 分钟前
Windows 文件无法粘贴到 Linux(Ubuntu)系统的解决方案
linux·windows·ubuntu
Bert.Cai42 分钟前
Linux tail命令详解
linux·运维
sbjdhjd1 小时前
Docker | 核心概念科普 + 保姆级部署
linux·运维·服务器·docker·云原生·面试·eureka
charlie1145141911 小时前
嵌入式C++教程实战之Linux下的单片机编程(9):HAL时钟使能 —— 不开时钟,外设就是一坨睡死的硅
linux·开发语言·c++·单片机·嵌入式硬件·c
以太浮标1 小时前
华为eNSP模拟器综合实验之- DHCP、DNS、HTTP和FTP服务器配置案例Client-Server
linux·服务器·windows·http·华为·信息与通信
摇滚侠1 小时前
Vmvare 虚拟机安装 Linux CentOS 7 操作系统 一键安装 Docker 1Panel 一键安装 MySQL Redis OpenClaw
linux·docker·centos
路溪非溪1 小时前
如何使用procfs来排查问题
linux·arm开发·驱动开发