MkDocs部署docker-compose
以下是用于在 Linux 服务器上部署 MkDocs 的 docker-compose.yml 文件。根据你的需求,这里提供两种方案:开发预览模式和生产构建模式。
方案一:开发预览模式(推荐用于内网文档)
适合服务器上需要实时预览、修改后立即生效的场景。使用 squidfunk/mkdocs-material 官方镜像,它内置了 Material 主题和常用插件。
version: "3.8"
services:
mkdocs:
image: squidfunk/mkdocs-material:latest
container_name: mkdocs
hostname: mkdocs
# 使用 serve 命令,绑定 0.0.0.0 确保外部可访问
command: serve --dev-addr=0.0.0.0:8000
ports:
- "8000:8000"
volumes:
# 将宿主机文档目录挂载到容器的 /docs
# 确保宿主机目录中包含 mkdocs.yml 和 docs/ 文件夹
- ./docs:/docs
restart: unless-stopped
使用说明:
- 在服务器上创建目录(例如
/opt/mkdocs),将你的文档项目(包含mkdocs.yml和docs/)放入其中。 - 将上述
docker-compose.yml也放在同一目录下。 - 运行
docker compose up -d,访问http://服务器IP:8000即可看到文档站。
方案二:生产构建 + Nginx 托管(推荐用于正式发布)
MkDocs 的 serve 模式是开发预览用的,不适合直接暴露到公网。正式部署应将站点构建为纯静态文件,用 Nginx 提供服务。
version: "3.8"
services:
# MkDocs 构建服务:将文档构建为静态 HTML
mkdocs-builder:
image: squidfunk/mkdocs-material:latest
container_name: mkdocs-builder
volumes:
- ./docs:/docs
# 构建输出到宿主机当前目录下的 site 文件夹
- ./site:/docs/site
# 执行 build 命令后容器即退出
command: build
# 只在需要更新时手动运行,不适合常驻
restart: "no"
# Nginx 服务:托管构建好的静态文件
nginx:
image: nginx:alpine
container_name: mkdocs-nginx
ports:
- "80:80"
volumes:
# 将构建产物挂载到 Nginx 的网站根目录
- ./site:/usr/share/nginx/html:ro
restart: unless-stopped
depends_on:
mkdocs-builder:
condition: service_completed_successfully
使用说明:
- 运行
docker compose up,mkdocs-builder会先执行构建,完成后nginx启动并托管静态站点。 - 更新文档时,只需重新运行
docker compose run --rm mkdocs-builder build或重启 compose 即可。
关于目录结构
无论哪种方案,你的文档项目目录结构应如下:
/opt/mkdocs/
├── docker-compose.yml
├── docs/ # 你的文档源文件目录
│ ├── index.md
│ └── ...
└── mkdocs.yml # MkDocs 配置文件
如果 docs/ 中还没有内容,可以先运行以下命令生成脚手架:
docker run --rm -v "$(pwd):/app" -w /app squidfunk/mkdocs-material new .
MkDocs部署docker-compose
部署文件已生成并通过 YAML 语法校验。方案采用两段式部署(构建静态站 + nginx 托管),架构如下:

<html style="margin:0;padding:0;">
<title>MkDocs Docker 两段式部署架构</title>
<div style="width:100%;box-sizing:border-box;max-width:960px;background:#fbfcfe;border:1px solid #e3e8ef;border-radius:12px;padding:16px 18px 14px;font-family:-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;color:#1f2937;">
<div style="font-size:16px;font-weight:700;margin-bottom:10px;">MkDocs Docker 部署架构(两段式)</div>
<div style="display:flex;align-items:stretch;gap:0;flex-wrap:wrap;">
<div style="flex:1.1;min-width:190px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:10px;padding:12px;">
<div style="font-size:12px;color:#6b7280;margin-bottom:4px;">你的项目目录(构建上下文)</div>
<div style="font-size:13px;font-weight:700;color:#1e40af;">docs/ + mkdocs.yml</div>
<div style="font-size:12px;color:#374151;line-height:1.6;margin-top:4px;">Markdown 源文件<br>导航/主题配置</div>
</div>
<div style="width:24px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:18px;">→</div>
<div style="flex:1.2;min-width:190px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:10px;padding:12px;">
<div style="font-size:12px;color:#6b7280;margin-bottom:4px;">阶段 1 · 构建(Dockerfile)</div>
<div style="font-size:13px;font-weight:700;color:#166534;">squidfunk/mkdocs-material</div>
<div style="font-size:12px;color:#374151;line-height:1.6;margin-top:4px;">mkdocs build 生成静态 HTML → /site</div>
<div style="font-size:12px;color:#16a34a;font-weight:600;margin-top:3px;">临时构建容器,用完即弃</div>
</div>
<div style="width:24px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:18px;">→</div>
<div style="flex:1.2;min-width:190px;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;padding:12px;">
<div style="font-size:12px;color:#6b7280;margin-bottom:4px;">阶段 2 · 运行(nginx:alpine)</div>
<div style="font-size:13px;font-weight:700;color:#92400e;">nginx 托管静态站</div>
<div style="font-size:12px;color:#374151;line-height:1.6;margin-top:4px;">只含静态文件,镜像极小<br>无 Python/运行时依赖</div>
</div>
<div style="width:24px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:18px;">→</div>
<div style="flex:0.9;min-width:140px;background:#fef2f2;border:1px solid #fecaca;border-radius:10px;padding:12px;">
<div style="font-size:13px;font-weight:700;color:#991b1b;">[http://localhost:8000](http://localhost:8000)</div>
<div style="font-size:12px;color:#374151;line-height:1.6;margin-top:4px;">映射 8000:80</div>
</div>
</div>
</div>
核心文件内容:
docker-compose.yml
services:
mkdocs:
build: .
image: mkdocs-site:latest
container_name: mkdocs-site
restart: unless-stopped
ports:
- "8000:80"
environment:
TZ: Asia/Shanghai
Dockerfile
# ============ 阶段 1:构建静态站点 ============
FROM squidfunk/mkdocs-material:latest AS builder
WORKDIR /docs
COPY . .
RUN mkdocs build --site-dir /site
# ============ 阶段 2:nginx 托管静态站 ============
FROM nginx:alpine
COPY --from=builder /site /usr/share/nginx/html
EXPOSE 80
使用方式:把 docker-compose.yml、Dockerfile、.dockerignore 放进你的 MkDocs 站点根目录(与 docs/、mkdocs.yml 同级),然后:
docker compose up -d --build # 构建并启动,访问 [http://localhost:8000](http://localhost:8000)
docker compose up -d --build # 以后每次改文档,重新构建即可生效
另外 README 里附带了本地预览模式(mkdocs serve 热更新,改文档即时刷新,适合开发期)。整套文件已交付给你:
部署文件已生成并通过 YAML 语法校验。方案采用两段式部署(构建静态站 + nginx 托管),架构如下:

<html style="margin:0;padding:0;">
<title>MkDocs Docker 两段式部署架构</title>
<div style="width:100%;box-sizing:border-box;max-width:960px;background:#fbfcfe;border:1px solid #e3e8ef;border-radius:12px;padding:16px 18px 14px;font-family:-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;color:#1f2937;">
<div style="font-size:16px;font-weight:700;margin-bottom:10px;">MkDocs Docker 部署架构(两段式)</div>
<div style="display:flex;align-items:stretch;gap:0;flex-wrap:wrap;">
<div style="flex:1.1;min-width:190px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:10px;padding:12px;">
<div style="font-size:12px;color:#6b7280;margin-bottom:4px;">你的项目目录(构建上下文)</div>
<div style="font-size:13px;font-weight:700;color:#1e40af;">docs/ + mkdocs.yml</div>
<div style="font-size:12px;color:#374151;line-height:1.6;margin-top:4px;">Markdown 源文件<br>导航/主题配置</div>
</div>
<div style="width:24px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:18px;">→</div>
<div style="flex:1.2;min-width:190px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:10px;padding:12px;">
<div style="font-size:12px;color:#6b7280;margin-bottom:4px;">阶段 1 · 构建(Dockerfile)</div>
<div style="font-size:13px;font-weight:700;color:#166534;">squidfunk/mkdocs-material</div>
<div style="font-size:12px;color:#374151;line-height:1.6;margin-top:4px;">mkdocs build 生成静态 HTML → /site</div>
<div style="font-size:12px;color:#16a34a;font-weight:600;margin-top:3px;">临时构建容器,用完即弃</div>
</div>
<div style="width:24px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:18px;">→</div>
<div style="flex:1.2;min-width:190px;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;padding:12px;">
<div style="font-size:12px;color:#6b7280;margin-bottom:4px;">阶段 2 · 运行(nginx:alpine)</div>
<div style="font-size:13px;font-weight:700;color:#92400e;">nginx 托管静态站</div>
<div style="font-size:12px;color:#374151;line-height:1.6;margin-top:4px;">只含静态文件,镜像极小<br>无 Python/运行时依赖</div>
</div>
<div style="width:24px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:18px;">→</div>
<div style="flex:0.9;min-width:140px;background:#fef2f2;border:1px solid #fecaca;border-radius:10px;padding:12px;">
<div style="font-size:13px;font-weight:700;color:#991b1b;">[http://localhost:8000](http://localhost:8000)</div>
<div style="font-size:12px;color:#374151;line-height:1.6;margin-top:4px;">映射 8000:80</div>
</div>
</div>
</div>
核心文件内容:
docker-compose.yml
services:
mkdocs:
build: .
image: mkdocs-site:latest
container_name: mkdocs-site
restart: unless-stopped
ports:
- "8000:80"
environment:
TZ: Asia/Shanghai
Dockerfile
# ============ 阶段 1:构建静态站点 ============
FROM squidfunk/mkdocs-material:latest AS builder
WORKDIR /docs
COPY . .
RUN mkdocs build --site-dir /site
# ============ 阶段 2:nginx 托管静态站 ============
FROM nginx:alpine
COPY --from=builder /site /usr/share/nginx/html
EXPOSE 80
使用方式:把 docker-compose.yml、Dockerfile、.dockerignore 放进你的 MkDocs 站点根目录(与 docs/、mkdocs.yml 同级),然后:
docker compose up -d --build # 构建并启动,访问 [http://localhost:8000](http://localhost:8000)
docker compose up -d --build # 以后每次改文档,重新构建即可生效
另外 README 里附带了本地预览模式(mkdocs serve 热更新,改文档即时刷新,适合开发期)。整套文件已交付给你:
四个文件已交付完毕(路径:mkdocs-docker/ 目录下):
- docker-compose.yml — 部署编排
- Dockerfile — 两段式构建(mkdocs-material 构建 → nginx 托管)
- .dockerignore — 排除
site/、.git/等,加快构建 - README.md — 使用说明 + 本地预览模式 + 常见问题
部署三步走:放进站点根目录 → docker compose up -d --build → 访问 [http://localhost:8000](http://localhost:8000)。需要我再加上 HTTPS 反代(Caddy/Traefik)、CI 自动构建或子路径部署的配置吗?
赠人玫瑰
手留余香
我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【关注我】。

浙公网安备 33010602011771号