文章

Docker

Docker

好 👍 我帮你写一个改进版 Dockerfile,保证无论 Gemfile.lock 在不在,都能正常构建:


📄 Dockerfile(改进版)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 使用 Ruby 3.3 最新版作为基础镜像
FROM ruby:3.3

# 设置工作目录
WORKDIR /srv/jekyll

# 安装构建依赖
RUN apt-get update && apt-get install -y \
    build-essential \
    libffi-dev \
    libyaml-dev \
    zlib1g-dev \
    git \
    && rm -rf /var/lib/apt/lists/*

# 安装 bundler
RUN gem install bundler

# 先复制 Gemfile 和(可选的)Gemfile.lock
COPY Gemfile ./
COPY Gemfile.lock* ./

# 安装依赖
RUN bundle install

# 复制站点内容
COPY . .

# 默认启动 Jekyll 服务
EXPOSE 4000
CMD ["bundle", "exec", "jekyll", "serve", "--host", "0.0.0.0", "--port", "4000", "--livereload"]

📄 docker-compose.yml(保持不变)

1
2
3
4
5
6
7
8
9
10
11
version: "3.9"

services:
  jekyll:
    build: .
    container_name: jekyll
    ports:
      - "4008:4000"
    volumes:
      - .:/srv/jekyll
    command: bundle exec jekyll serve --host 0.0.0.0 --port 4000 --livereload

🚀 构建 & 启动

1
2
docker compose build --no-cache
docker compose up

这样:

  • 如果 Gemfile.lock 存在,就会用里面固定的依赖。
  • 如果不存在,Bundler 会自动生成新的。

要不要我顺便帮你把 Gemfile 也精简/优化一下,保证和 Chirpy 主题完全兼容?

本文由作者按照 CC BY 4.0 进行授权