Skip to content

About

⛴ Docker images, and CI builders for Jekyll.

Topics

Resources

Stars

1.0k stars

Watchers

17 watching

Forks

Repository files navigation

Jekyll Docker

Docker images for running Jekyll with the official Ruby image family and Docker Buildx Bake. The images keep the long-standing /srv/jekyll workdir, expose Jekyll's default development ports, and follow the official Ruby image pattern of running as root by default.

Images

Image Purpose
jekyll/jekyll Default image with Jekyll and common community gems.
jekyll/jekyll:pages GitHub Pages-compatible image using versions from docker-bake.hcl.

jekyll/builder and jekyll/minimal are archived and no longer built or published. Their final release was 4.4.1; existing latest, 4, and 4.4 tags for those images should be treated as aliases of that final release.

Usage

Build a site in the current directory:

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  jekyll/jekyll \
  jekyll build

Serve a site locally:

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  --publish 4000:4000 \
  --publish 35729:35729 \
  jekyll/jekyll \
  jekyll serve --host 0.0.0.0 --livereload

On Docker Desktop for Windows or other bind mount setups where host file changes do not trigger rebuilds, use Jekyll's polling watcher:

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  --publish 4000:4000 \
  --publish 35729:35729 \
  jekyll/jekyll \
  jekyll serve --host 0.0.0.0 --livereload --force_polling

Run Bundler explicitly when your project has a Gemfile:

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  jekyll/jekyll \
  bundle install

docker run --rm \
  --volume "$PWD:/srv/jekyll" \
  jekyll/jekyll \
  bundle exec jekyll build

For Linux bind mounts, use Docker's standard --user flag when you want generated files to be owned by your host user:

docker run --rm \
  --user "$(id -u):$(id -g)" \
  --volume "$PWD:/srv/jekyll" \
  jekyll/jekyll \
  jekyll build

For rootless Podman, do not pass Docker's --user flag. Run the image as-is so Podman maps container root to your host user:

podman run --rm \
  --volume "$PWD:/srv/jekyll" \
  docker.io/jekyll/jekyll \
  jekyll build

Custom System Packages

The images do not install operating-system packages at runtime. Build a project-specific image when your site needs additional Debian packages:

FROM jekyll/jekyll

RUN apt-get update \
  && apt-get install -y --no-install-recommends graphviz \
  && rm -rf /var/lib/apt/lists/*

The default image includes Node.js and pnpm. Corepack package managers are configured per target in docker-bake.hcl.

Local Development

Build every image target:

docker buildx bake

Build and load a single target locally:

docker buildx bake --load jekyll
docker buildx bake --load pages

Run the smoke test suite:

script/test jekyll amd64
script/test pages amd64

Refresh GitHub Pages versions in docker-bake.hcl:

script/update

GitHub Pages Versions

script/update downloads https://pages.github.com/versions.json and updates the Pages-related Bake variables:

  • PAGES_RUBY_VERSION
  • PAGES_JEKYLL_VERSION
  • GITHUB_PAGES_VERSION

About

⛴ Docker images, and CI builders for Jekyll.

Topics

Resources

Stars

1.0k stars

Watchers

17 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages