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

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

相关推荐
Yana.nice31 分钟前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月36 分钟前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
小白跃升坊1 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey1 小时前
【Linux】线程同步与互斥
linux·笔记
舰长1151 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
zmjjdank1ng2 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.2 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居
VekiSon2 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
zl_dfq2 小时前
Linux 之 【进程信号】(signal、kill、raise、abort、alarm、Core Dump核心转储机制)
linux
Ankie Wan3 小时前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc