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 权限不足问题;

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

相关推荐
ChristXlx5 小时前
Linux安装redis(虚拟机适用)
linux·运维·redis
源文雨5 小时前
PVE实现USB硬盘盒在备份前自动上电/结束后自动断电脚本
linux·运维·服务器·备份·perl·pve·usb硬盘盒
ascarl20105 小时前
准确--CentOS 7 配置用户资源限制(nofile / nproc)
linux·运维·centos
秋深枫叶红5 小时前
嵌入式第三十六篇——linux系统编程——线程
linux·运维·服务器·学习
老王熬夜敲代码6 小时前
Linux信号量
linux·笔记·面试
顾安r6 小时前
12.17 脚本工具 自动化全局跳转
linux·前端·css·golang·html
三小尛6 小时前
linux项目自动化构建工具(make和makefile)
linux
大聪明-PLUS6 小时前
如何修补 Linux 内核:完整指南
linux·嵌入式·arm·smarc
kk5796 小时前
ubuntu20.04运行todesk显示网络连接异常无网络
linux·运维·服务器