如何在Docker容器中无GUI安装PlantUML?
当然可以!完全不需要依赖X11或GTK就能在Docker里轻量安装PlantUML,我给你整理了两种靠谱的方案,都能把镜像体积控制得很小:
方案一:基于OpenJDK Slim(常用轻量版)
这个方案用Debian系的 slim 版JRE镜像,安装Graphviz时刻意跳过GUI相关依赖,平衡了易用性和体积:
- 选择
openjdk:17-jre-slim作为基础镜像,它比完整版JDK/JRE小很多,只保留核心运行环境 - 安装Graphviz时,一定要加上
--no-install-recommends参数,这会跳过所有可选的GUI依赖,只装PlantUML生成图必需的核心组件 - 最后清理APT缓存,进一步缩小镜像体积
完整Dockerfile示例:
FROM openjdk:17-jre-slim # 安装Graphviz核心组件,跳过GUI依赖 RUN apt-get update && apt-get install -y --no-install-recommends graphviz \ && rm -rf /var/lib/apt/lists/* # 下载指定版本的PlantUML jar包(可以替换成你需要的版本) RUN mkdir -p /opt/plantuml \ && curl -L https://github.com/plantuml/plantuml/releases/download/v1.2024.5/plantuml-1.2024.5.jar -o /opt/plantuml/plantuml.jar # 创建可直接调用的plantuml命令脚本 RUN echo '#!/bin/sh\njava -jar /opt/plantuml/plantuml.jar "$@"' > /opt/plantuml/plantuml \ && chmod +x /opt/plantuml/plantuml # 把plantuml命令加入环境变量 ENV PATH="/opt/plantuml:${PATH}" # 验证安装(可选,构建时会自动执行) CMD ["plantuml", "-version"]
方案二:基于Alpine Linux(极致轻量)
如果追求最小镜像体积,Alpine是更好的选择,它的基础镜像本身只有几十MB,加上JRE和Graphviz核心包后,最终镜像大概200MB左右:
FROM openjdk:17-jre-alpine # Alpine上安装Graphviz核心包,默认就不带GUI依赖 RUN apk add --no-cache graphviz # 下载PlantUML jar包 RUN mkdir -p /opt/plantuml \ && wget -O /opt/plantuml/plantuml.jar https://github.com/plantuml/plantuml/releases/download/v1.2024.5/plantuml-1.2024.5.jar # 创建可执行脚本并加入环境变量 RUN echo '#!/bin/sh\njava -jar /opt/plantuml/plantuml.jar "$@"' > /opt/plantuml/plantuml \ && chmod +x /opt/plantuml/plantuml ENV PATH="/opt/plantuml:${PATH}" # 验证安装 CMD ["plantuml", "-version"]
使用方法
构建镜像后,你可以通过挂载本地目录的方式,让容器处理本地的PlantUML文件:
# 构建镜像(假设Dockerfile叫Dockerfile.plantuml) docker build -t my-plantuml -f Dockerfile.plantuml . # 处理本地的diagram.puml文件,生成图片到当前目录 docker run --rm -v $(pwd):/workspace -w /workspace my-plantuml plantuml diagram.puml
这样整个过程完全不需要任何GUI组件,镜像体积也能控制得非常小,完美适配你的需求!
内容的提问来源于stack exchange,提问作者petersohn
相关产品推荐
相关产品推荐

