MarkItDown Docker安装

1. 创建项目目录

bash

复制代码
mkdir ~/markitdown-service && cd ~/markitdown-service

2. 编写 app.py(HTTP 服务主程序)

python

python 复制代码
from fastapi import FastAPI, UploadFile, File, HTTPException
from markitdown import MarkItDown
import tempfile
import os
from pathlib import Path

app = FastAPI(title="MarkItDown Converter")
md = MarkItDown()

@app.post("/convert")
async def convert_to_markdown(file: UploadFile = File(...)):
    # 支持的文件类型
    supported = [
        "application/pdf",
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        "application/vnd.openxmlformats-officedocument.presentationml.presentation",
        "text/html",
        "text/plain",
        "text/csv",
        "application/json",
        "application/xml",
        "text/xml"
    ]
    if file.content_type not in supported:
        raise HTTPException(status_code=400, detail=f"Unsupported file type: {file.content_type}")

    suffix = Path(file.filename).suffix
    with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp:
        content = await file.read()
        tmp.write(content)
        tmp_path = tmp.name

    try:
        result = md.convert(tmp_path)
        markdown_content = result.text_content
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Conversion failed: {str(e)}")
    finally:
        os.unlink(tmp_path)

    return {"filename": file.filename, "markdown": markdown_content}

3. 编写 Dockerfile

dockerfile

python 复制代码
FROM python:3.11-slim

# 替换 apt 源为阿里云(加速系统依赖安装)
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources || \
    sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list

# 安装 ffmpeg(消除 markitdown 警告,可选)
RUN apt-get update && apt-get install -y --no-install-recommends \
    ffmpeg \
    && rm -rf /var/lib/apt/lists/*

# 安装 Python 依赖(使用清华源加速)
RUN pip install --no-cache-dir 'markitdown[all]' fastapi uvicorn python-multipart -i https://pypi.tuna.tsinghua.edu.cn/simple

COPY app.py .

CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]

4. 构建 Docker 镜像

bash

python 复制代码
docker build -t markitdown-api .

提示:如果之前有旧容器,先停止删除:

bash

复制代码
docker stop markitdown-api && docker rm markitdown-api
docker rmi markitdown-api   # 删除旧镜像

5. 运行容器

bash

python 复制代码
docker run -d -p 8000:8000 --name markitdown-api markitdown-api

6. 验证服务是否正常

bash

python 复制代码
# 查看日志
docker logs markitdown-api

# 本地测试(需有测试文件,如 test.pdf)
curl -F "file=@/path/to/test.pdf" http://localhost:8000/convert

日志中应出现 Application startup complete.,curl 返回 JSON 格式的 markdown 内容。

体验地址:http://localhost:5156/Convert/JsonToMarkdown

相关推荐
古法老登瞎折腾17 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
琥珀.17 小时前
mysql中json数组转列表查询
linux·运维·服务器
dawnsky.liu18 小时前
在 RHEL 中使用 goose 实现远程主机管理
linux·运维·ai
Linux运维技术栈19 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维
云上先途120 小时前
企业 AI 服务部署周期多久,会不会影响原有业务运转?
大数据·运维·人工智能
执伞人ONLY21 小时前
AI知识库自动化知识加工没做对,人工整理永远追不上知识产生
运维·人工智能·自动化
叼烟扛炮21 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
无足鸟ICT21 小时前
【RHCA+】who命令(查看已登陆用户)
linux·运维·服务器
RacentCLM1 天前
证书即服务CaaS:从申请、续期到部署的自动化链路拆解
运维·数据库·自动化·ssl
注塑机数据采集联网1 天前
注塑机生产管控MES系统应用
大数据·运维·服务器·人工智能·物联网