見出し画像

DockerでJekyllのイメージを動かそうと思ったらエラーで起動しない[解決]

背景


  • GitHub PagesにWebサイトを公開したが、修正を確認するために毎回Pushするのは面倒なので、ローカルに開発環境を構築したい。

  • ローカル環境を汚染したくないのでDockerの利用を検討。

  • jekyll公式のイメージがあるのでそれを利用してみたが、うちの環境では起動しない。


環境


  • Windows10/WSL2/Ubuntu22.04

  • Docker Desktop


設定ファイルと実行結果


docker-compose.yml

version: "3"
services:
  app:
    container_name: jekyll
    image: jekyll/jekyll:pages
    command: jekyll serve --no-watch --trace
    volumes:
      - ./:/srv/jekyll
    ports:
      - 4000:4000

ログ

$ sudo docker-compose up
Starting sistersatoricom_jekyll_1 ... done
Attaching to sistersatoricom_jekyll_1
jekyll_1  | ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x86_64-linux-musl]
jekyll_1  | Configuration file: /srv/jekyll/_config.yml
jekyll_1  |             Source: /srv/jekyll
jekyll_1  |        Destination: /srv/jekyll/_site
jekyll_1  |  Incremental build: disabled. Enable with --incremental
jekyll_1  |       Generating... 
jekyll_1  |                     done in 0.817 seconds.
jekyll_1  |  Auto-regeneration: disabled. Use --watch to enable.
jekyll_1  | <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- webrick (LoadError)
jekyll_1  |     from <internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
jekyll_1  |     from /usr/gem/gems/jekyll-3.9.0/lib/jekyll/commands/serve/servlet.rb:3:in `<top (required)>'
jekyll_1  |     from /usr/gem/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:184:in `require_relative'
jekyll_1  |     from /usr/gem/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:184:in `setup'
jekyll_1  |     from /usr/gem/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:102:in `process'
jekyll_1  |     from /usr/gem/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:93:in `block in start'
jekyll_1  |     from /usr/gem/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:93:in `each'
jekyll_1  |     from /usr/gem/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:93:in `start'
jekyll_1  |     from /usr/gem/gems/jekyll-3.9.0/lib/jekyll/commands/serve.rb:75:in `block (2 levels) in init_with_program'
jekyll_1  |     from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `block in execute'
jekyll_1  |     from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `each'
jekyll_1  |     from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `execute'
jekyll_1  |     from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/program.rb:42:in `go'
jekyll_1  |     from /usr/gem/gems/mercenary-0.3.6/lib/mercenary.rb:19:in `program'
jekyll_1  |     from /usr/gem/gems/jekyll-3.9.0/exe/jekyll:15:in `<top (required)>'
jekyll_1  |     from /usr/gem/bin/jekyll:25:in `load'
jekyll_1  |     from /usr/gem/bin/jekyll:25:in `<main>'
sistersatoricom_jekyll_1 exited with code 1

エラー内容

<internal:/usr/local/lib/ruby/site_ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in require': cannot load such file -- webrick (LoadError)

webrickというライブラリが読み込めてないっぽい。


調査


jekyll/jekyll:pagesイメージのコンテナを起動して、中身を調査してみる

$ docker run -v $(pwd):/srv/jekyll -it jekyll/jekyll:pages bash
(docker)# jekyll serve --no-watch --trace

同様のエラーが発生することを確認。

WebrickのGemをインストールして再実行してみる

(docker)# gem install webrick
(docker)# jekyll serve --no-watch --trace

エラーが解消され、起動を確認。


ファイル修正


手動でコンテナを立ち上げて、Gemインストールしてなんてやってられないので、自動でwebrickをインストールしてからコンテナを立ち上げるように変更する。

Dockerfile

FROM jekyll/jekyll:pages
RUN gem install webrick

docker-compose.yml

version: "3"
services:
  app:
    container_name: jekyll
    build:
      context: .
      dockerfile: Dockerfile
    command: jekyll serve --no-watch --trace
    volumes:
      - ./:/srv/jekyll
    ports:
      - 4000:4000


起動


$ sudo docker-compose up
1999年

起動できた。


今後の課題


  • 今回の解決法よりよい方法がないか考える

  • ファイルの更新を検知して自動リロードなどができない問題の解決。(WSLの仕様上jekyll —watchオプションは利用できないらしい)

この記事が気に入ったらサポートをしてみませんか?