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

Windows10下使用Docker Compose构建Jekyll站点失败求助

解决Windows 10下Docker Compose构建Jekyll站点的目录创建错误问题

我在Windows 10系统中使用docker-compose up命令构建Jekyll站点时失败,报错信息如下:

jekyll 3.8.4 | Error: File exists @ dir_s_mkdir - /jekyll/app/_site/tag/mytags
jekyll 3.8.4 | Error: File exists @ dir_s_mkdir - /jekyll/app/_site/tag/inspire

该项目可在Mac OS上正常运行,我尝试将jekyll-paginate 1.1.0升级至jekyll-paginate-v2 2.0.0,但问题仍未解决。不过使用bundle exec jekyll serve命令可成功构建站点并生成_site文件夹。

相关运行日志、配置及Dockerfile

运行日志

site_1 | 11:49:16 webpack.1 | Entrypoint undefined = ../../app/_layouts/default.html
site_1 | 11:49:16 webpack.1 | 4 modules
site_1 | 11:49:16 webpack.1 | ��� ���wdm���: Compiled successfully.
site_1 | 11:49:39 webpack.1 | ��� ���wdm���: Compiling...
site_1 | 11:49:42 jekyll.1 | exited with code 1
site_1 | 11:49:42 system | sending SIGTERM to all processes
site_1 | 11:49:44 webpack.1 | 98% after emitting CopyPlugin
site_1 | 11:49:44 webpack.1 | exited with code 0

docker-compose.yml配置

version: '3'
volumes:
  app-gems:
    driver: local
services:
  site:
    build:
      context: ./dev
      dockerfile: Dockerfile
    volumes:
      - .:/jekyll/app
      - app-gems:/usr/local/bundle
    environment:
      - NODE_ENV=develop
    command: ./app/dev/scripts/serve.sh
    stdin_open: true
    tty: true

Dockerfile内容

FROM ruby:2.5-stretch as builder
ARG APP_URL
ENV NODE_VER 8
ENV APP_HOME /app
ENV JEKYLL_APP_DIR /app
ENV NODE_ENV production
RUN sed -i "s/stretch main/stretch main contrib non-free/" /etc/apt/sources.list \
 && curl -sL https://deb.nodesource.com/setup_$NODE_VER.x | bash - \
 && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
 && echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list \
 && apt-get update && apt-get install -y libxml2-dev libxslt1-dev unzip imagemagick nodejs cmake yarn \
 && npm install -g bower \
 && rm -rf /var/lib/apt/lists/*
WORKDIR $APP_HOME
COPY . .
RUN ./dev/scripts/build.sh && cat app/_layouts/default.html

FROM nginx:1.14-alpine
ENV NGINX_PORT 3000
COPY --from=builder /app/_site /usr/share/nginx/html
RUN ls -la /usr/share/nginx/html/

问题分析与解决方案

这个错误的核心是Windows和Linux文件系统的大小写敏感性差异:Mac OS的默认文件系统(APFS)和Windows的NTFS都是大小写不敏感的,但Docker容器内的Linux文件系统是大小写敏感的。当你在Windows上挂载本地目录到容器时,若本地已经存在大小写不同的同名目录(比如MyTags和mytags),容器里的Jekyll尝试创建小写版本时,Windows文件系统会认为目录已存在,从而抛出错误。而bundle exec jekyll serve能成功,大概率是因为这个命令在本地Windows环境运行,系统的大小写不敏感特性自动处理了冲突。

给你几个可行的解决方向:

1. 统一目录/文件的大小写

先在本地Windows的_site/tag目录下检查,是否存在类似MyTags、Inspire这类和报错目录大小写不同的内容。把所有相关目录、文件名统一成和报错一致的格式(比如全小写的mytags、inspire),消除大小写冲突。

2. 调整Docker挂载的大小写敏感设置

如果你的Windows 10版本是1809及以上,且Docker Desktop启用了WSL 2后端,可以在docker-compose.yml的挂载配置里添加大小写不敏感选项:

volumes:
  - .:/jekyll/app:cached,case=insensitive

这样容器内的文件系统会和Windows保持一致的大小写不敏感特性,避免冲突。

3. 修改构建脚本,提前清理冲突目录

打开./app/dev/scripts/serve.sh,在Jekyll构建命令前添加清理步骤,确保每次构建前删除可能存在的冲突目录:

# 先删除可能存在的冲突目录
rm -rf /jekyll/app/_site/tag/mytags /jekyll/app/_site/tag/inspire
# 再执行Jekyll构建命令
bundle exec jekyll build

4. 检查jekyll-paginate-v2的配置

虽然你升级了分页插件,但可能_config.yml里的标签目录配置存在大小写不一致的问题。检查配置中的标签路径:

pagination:
  tag_dir: 'tag' # 确保这个路径和实际要创建的目录大小写完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:03:14