说明:
项目部署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 权限不足问题;
数据持久化:配置文件、业务文档通过挂载目录持久化,容器重启后数据不丢失。