docker - 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>'
不知道在这种情况下该怎么做。
解决方案
看来 Docker 卷对您的 $PWD 没有写权限。
- 在 Docker 卷中,用户
jekyll
运行jekyll serve
命令并在 /srv/jekyll 上写入输出文件。 - 由于您将 $PWD 挂载到 /srv/jekyll ,因此用户
jekyll
还需要对 $PWD 的写入权限。 - 但是您的主机将没有 user
jekyll
,因此该命令将失败。
要解决此问题,您可以通过指定 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
推荐阅读
- reactjs - 为什么这个 JSX 中有一个随机空间?
- mysql - 如何登录 Mariadb?
- html - 如何在 Safari 中显示 OpenSearch 建议?
- nhibernate - NHibernate:无法调用 QueryOver
().List() 来自 IronPython - android - android ConstraintLayoutStates - 如何获取对 constraintLayoutStates 对象的引用?
- android - Android 应用程序 GUI - 是否可以嵌套 LinearLayout?
- typescript - 在生产中禁用 console.log()
- ibm-cloud - IBM Cloud:如何在未使用时禁用分析引擎?
- python-3.x - 尝试使用 python 的 win32api 模块在 Windows 上编写“ls”脚本
- r - 预测时间序列 XGBoost 模型