You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

客户端操作

  1. 把LaTeX文件放到树莓派的SMB/NFS共享目录中
  2. 通过SSH远程触发编译:
ssh [树莓派IP] "docker exec texlive-container latexmk -pdf /data/your-document.tex"
  1. 直接从共享目录获取生成的PDF文件

内容的提问来源于stack exchange,提问作者Dylan Russell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:37:23