如何在Docker容器中共享TeXLive供局域网设备编译LaTeX文档
局域网共享Docker内TeXLive的几种实用方案
不需要挂载容器文件系统到客户端,以下是几个更合理的实现方式:
1. SSH远程编译(最简单方案)
给容器添加SSH服务,让局域网设备通过SSH连接到容器,传输文件并执行编译命令。
修改Dockerfile
FROM debian:stable-slim RUN apt update && \ apt-get -y install texlive-full openssh-server && \ mkdir /var/run/sshd && \ # 设置root密码(替换为你自己的密码) echo 'root:texlive123' | chpasswd && \ # 允许root登录 sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
构建并运行容器
# 构建镜像 docker build -t texlive-ssh . # 运行容器,映射树莓派的2222端口到容器的22端口 docker run -d -p 2222:22 --name texlive-server texlive-ssh
客户端使用步骤
# 1. 把本地LaTeX文件传到容器的/tmp目录 scp -P 2222 your-document.tex root@[树莓派IP]:/tmp/ # 2. 远程执行编译命令(用latexmk自动处理依赖) ssh -p 2222 root@[树莓派IP] "cd /tmp && latexmk -pdf your-document.tex" # 3. 把生成的PDF取回本地 scp -P 2222 root@[树莓派IP]:/tmp/your-document.pdf .
可以把这几步写成shell脚本,一键完成编译流程。
2. 搭建LaTeX编译API服务(适合自动化场景)
用Python轻量Web框架搭建编译服务,客户端上传.tex文件即可获取PDF,无需命令行操作。
修改Dockerfile
FROM debian:stable-slim RUN apt update && \ apt-get -y install texlive-full python3 python3-pip && \ pip install fastapi uvicorn python-multipart # 复制服务代码到容器 COPY app.py /app/ WORKDIR /app EXPOSE 8000 CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
编写服务代码app.py
from fastapi import FastAPI, File, UploadFile from fastapi.responses import Response import subprocess import tempfile from pathlib import Path app = FastAPI() @app.post("/compile", responses={200: {"content": {"application/pdf": {}}}}) async def compile_latex(file: UploadFile = File(...)): with tempfile.TemporaryDirectory() as tmp_dir: # 保存上传的.tex文件 tex_path = Path(tmp_dir) / file.filename with open(tex_path, "wb") as f: f.write(await file.read()) # 执行编译命令 compile_result = subprocess.run( ["latexmk", "-pdf", str(tex_path)], cwd=tmp_dir, capture_output=True, text=True ) if compile_result.returncode != 0: return {"error": "编译失败", "details": compile_result.stderr} # 返回生成的PDF文件 pdf_path = tex_path.with_suffix(".pdf") with open(pdf_path, "rb") as f: pdf_content = f.read() return Response(content=pdf_content, media_type="application/pdf")
构建并运行服务
docker build -t texlive-api . docker run -d -p 8000:8000 --name texlive-service texlive-api
客户端调用
用curl直接获取编译后的PDF:
curl -X POST -F "file=@your-document.tex" http://[树莓派IP]:8000/compile --output your-document.pdf
也可以在网页或自定义客户端中调用该API,实现可视化编译流程。
3. 共享目录+容器远程执行(适合频繁编辑场景)
在树莓派上搭建SMB/NFS文件共享服务,客户端把文件放到共享目录,通过SSH让容器编译共享目录内的文件。
运行容器(挂载共享目录)
假设树莓派上的共享目录是/home/pi/tex-projects,运行容器时挂载该目录:
# 保持容器后台运行 docker run -d -v /home/pi/tex-projects:/data --name texlive-container texlive-full sleep infinity
客户端操作
- 把LaTeX文件放到树莓派的SMB/NFS共享目录中
- 通过SSH远程触发编译:
ssh [树莓派IP] "docker exec texlive-container latexmk -pdf /data/your-document.tex"
- 直接从共享目录获取生成的PDF文件
内容的提问来源于stack exchange,提问作者Dylan Russell
相关产品推荐
相关产品推荐

