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

相关推荐
码农阿豪几秒前
多台服务器还在反复输SSH?用EasyNode集中管理连接
运维·服务器·ssh
qetfw11 分钟前
Debian Apache2 执行 Shell CGI:动态时间页面配置与验证
linux·运维·debian
Shadow(⊙o⊙)11 分钟前
CMake第一章——1.0CMake命令行,拉取源码、平台兼容的门槛技术。
linux·运维·服务器
DLYSB_9 小时前
存储运维实战:基于 Ceph Event 监听与 Python 适配器的分布式存储健康度物理声光响应架构
运维·ceph·python·报警灯
阿里云云原生10 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能
阿童木写作11 小时前
Python实现Temu图片批量翻译自动化教程
运维·人工智能·python·自动化
iori97king12 小时前
库存不足自动通知:第一次使用自动化
运维·自动化
@insist12312 小时前
信息系统管理工程师-信息系统运维资源、技术与智能运维核心考点解析
运维·软考·信管·软件水平考试·信息系统管理工程师
木子欢儿12 小时前
Intel 架构的 MacBook Pro 运行 Linux 发热量高解决
linux·运维·服务器
KKKlucifer14 小时前
运营商全域安全运维支撑体系落地实践
运维·安全