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

相关推荐
NPE~15 分钟前
CMDB科普:配置管理数据库——运维相关
运维·数据库·科普·cmdb·配置管理数据库
安易算力16 分钟前
GPU集群调度实践:Slurm/K8s混合部署与GPU共享优化 —— 从批处理到在线推理的统一调度架构
容器·架构·kubernetes
龙腾-虎跃2 小时前
Linux 趣味实战|纯 Bash Shell 脚本实现俄罗斯方块终端小游戏(完整源码资源)
linux·运维·bash
阳光九叶草LXGZXJ9 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
黄大刀10 小时前
DataPulse一款开箱即用的SCADA(四)-历史记录
运维·scada·动环
归秋14212 小时前
2026 企业 AI 办公工具选型指南:从评估框架到产品适配
大数据·运维·人工智能
Android系统攻城狮12 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
硅基手札14 小时前
【Linux内核专栏 14】网络协议栈
linux·运维·网络协议
工作10年+,存储芯片行业16 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
快乐の番薯16 小时前
卷王问卷考试系统自动化功能测试
运维·功能测试·自动化