首页 > 解决方案 > WSL 中 jekyll 映像的 Docker 权限问题

问题描述

我正在 WSL2 上使用 debian 运行 docker,并且正在尝试使用 jekyll 映像运行网站的本地版本。但是,我似乎遇到了 docker 的权限问题。我在跑:

docker run --rm --volume="$PWD:/srv/jekyll" -p 4000:4000 jekyll/jekyll jekyll serve --trace

这是我收到的错误消息:

ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux-musl]
Configuration file: none
/usr/local/lib/ruby/2.7.0/fileutils.rb:250:in `mkdir': Permission denied @ dir_s_mkdir - /srv/jekyll/.jekyll-cache (Errno::EACCES)
        from /usr/local/lib/ruby/2.7.0/fileutils.rb:250:in `fu_mkdir'
        from /usr/local/lib/ruby/2.7.0/fileutils.rb:228:in `block (2 levels) in mkdir_p'
        from /usr/local/lib/ruby/2.7.0/fileutils.rb:226:in `reverse_each'
        from /usr/local/lib/ruby/2.7.0/fileutils.rb:226:in `block in mkdir_p'
        from /usr/local/lib/ruby/2.7.0/fileutils.rb:211:in `each'
        from /usr/local/lib/ruby/2.7.0/fileutils.rb:211:in `mkdir_p'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/cache.rb:184:in `dump'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/cache.rb:101:in `[]='
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/cache.rb:45:in `clear_if_config_changed'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/site.rb:113:in `reset'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/site.rb:33:in `initialize'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/commands/build.rb:30:in `new'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/commands/build.rb:30:in `process'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/command.rb:89:in `block in process_with_graceful_fail'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/command.rb:89:in `each'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/command.rb:89:in `process_with_graceful_fail'
        from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/commands/serve.rb:86:in `block (2 levels) in init_with_program'
        from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `block in execute'
        from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `each'
        from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `execute'
        from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/program.rb:42:in `go'
        from /usr/gem/gems/mercenary-0.3.6/lib/mercenary.rb:19:in `program'
        from /usr/gem/gems/jekyll-4.0.0/exe/jekyll:15:in `<top (required)>'
        from /usr/gem/bin/jekyll:23:in `load'
        from /usr/gem/bin/jekyll:23:in `<main>'

不知道在这种情况下该怎么做。

标签: dockerpermissionsjekyllwindows-subsystem-for-linux

解决方案


看来 Docker 卷对您的 $PWD 没有写权限。

要解决此问题,您可以通过指定 UID 和 GID 来更改用户,如此处所述。 https://github.com/envygeeks/jekyll-docker#configuration

您需要检查主机上用户的 UID 和 GID(对 $PWD 具有写入权限),然后运行如下命令。

docker run --rm --volume="$PWD:/srv/jekyll" -e JEKYLL_UID=1001 -e JEKYLL_GID=116 -p 4000:4000 jekyll/jekyll jekyll serve

推荐阅读