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

无法通过Docker构建Docusaurus网站:多阶段构建文件复制失败

问题排查与修复方案

先确认Build阶段是否生成了正确的静态文件

首先验证构建阶段的产物是否存在:

  1. 单独构建build阶段镜像:
docker build --target build -t docusaurus-build -f docker/Dockerfile.docusaurus .
  1. 运行该镜像进入容器检查:
docker run -it docusaurus-build sh

在容器内执行以下命令:

  • 检查本地文档是否正确复制:ls -la /project/docs
  • 检查build目录是否生成及内容:ls -la /project/build

如果build目录为空,说明npm run build未正确执行或失败;如果docs目录没有你本地的md文件,说明COPY命令有误。

修复COPY文档的命令

你当前的COPY ./docs/docusaurus/* docs只会复制./docs/docusaurus下的文件,不会复制子目录,且无法完整同步目录结构。改成以下命令,确保完整复制本地文档目录的所有内容:

COPY ./docs/docusaurus/ ./docs/

这个命令会将本地./docs/docusaurus下的所有文件和子目录,完整复制到容器内的/project/docs目录,替换原有默认文档(如果需要保留默认文档,可单独复制特定文件)。

确保Build阶段成功生成产物

在Build阶段的npm run build后添加验证命令,构建时就能直观看到是否生成了build目录:

RUN npm run build && ls -la /project/build

如果构建时显示build目录为空或不存在,需要检查npm run build是否报错,可能是文档格式问题或依赖缺失。

验证最终镜像的文件复制情况

构建完成后,运行临时容器检查Nginx目录:

docker run --rm docusaurus-doc ls -la /usr/share/nginx/html

如果这里能看到静态文件,说明复制成功,此时启动Nginx服务即可正常访问;如果仍然为空,检查COPY命令的源路径是否正确(确保/project/build在Build阶段确实存在)。

完整修复后的Dockerfile示例

FROM node:16.14-alpine as build

RUN npx create-docusaurus@latest project classic
WORKDIR /project
# 完整复制本地文档目录
COPY ./docs/docusaurus/ ./docs/
# 构建并验证产物
RUN npm run build && ls -la /project/build
    
FROM nginx:1.17.4-alpine as serve
RUN echo $'server { \n\n  listen 8080; \n\n  root /usr/share/nginx/html; \n\n  index index.html; \n\n  server_name _; \n\n  location / { \n\n    try_files $uri $uri/ /index.html =404; \n\n  } \n\n}' > /etc/nginx/conf.d/default.conf
# 复制Build阶段的静态文件到Nginx目录
COPY --from=build /project/build/ /usr/share/nginx/html
EXPOSE 8080

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:05:32