【问题标题】:Unable to build cloned Jekyll site - jekyll 3.8.5 | Error: Permission denied @ dir_s_mkdir - /srv/jekyll/_site无法构建克隆的 Jekyll 站点 - jekyll 3.8.5 |错误:权限被拒绝@dir_s_mkdir - /srv/jekyll/_site
【发布时间】:2019-12-21 12:02:44
【问题描述】:

由于权限错误,我无法构建我用 git 克隆的 jekyll 站点。我正在使用 Ubuntu 18.04。我查看了大多数关于此错误的 SO 帖子,但没有一个解决方案对我有用。

构建站点的命令是 docker-compose up。使用或不使用 sudo 运行此命令都不会更改错误。我在码头工人组。我可以使用 bundle exec jekyll serve 构建网站。此命令成功创建 _site 文件夹。

我尝试手动添加 _site,但这会导致另一个错误。

$ docker-compose up         
Starting site ... done
Attaching to site
site | Configuration file: /srv/jekyll/_config.yml
site |             Source: /srv/jekyll
site |        Destination: /srv/jekyll/_site
site |  Incremental build: disabled. Enable with --incremental
site |       Generating... 
site |        Jekyll Feed: Generating feed for posts
site | jekyll 3.8.5 | Error:  Permission denied @ dir_s_mkdir - /srv/jekyll/_site
site exited with code 1

docker-compose.yml

version: '3'
services:
  doc:
    image: jekyll/jekyll:3.8
    volumes:
      - .:/srv/jekyll
    container_name: site
    ports:
      - "4000:4000"
    stdin_open: true
    tty: true
    command: bash -c "bundle install && bundle exec jekyll serve --host 0.0.0.0"

我希望不会出现错误并成功创建 _site 目录。

【问题讨论】:

  • 在卷声明中. 指的是您主机的当前目录。该目录的权限是什么?所有者是谁?最好将. 替换为./jekyll 并将您需要的任何文件放入新目录中。然后你可以尝试给这个目录更多的写权限。
  • @Mihai 我运行命令所在目录的权限是drwxr-xr-x 12 addison addison 4.0K Aug 14 15:50
  • 尝试添加此卷:- ./_site:/srv/jekyll/_site 这样该文件夹将由 docker-compose 创建并具有正确的权限。
  • @Mihai 在执行命令chmod ugo+rwx site 然后使用docker-compose up 后,我能够构建站点。当我添加您建议的行时,我收到另一个错误jekyll 3.8.5 | Error: Permission denied @ rb_sysopen - /srv/jekyll/_site/blog.html。我对我的解决方案并不完全满意,因为我有其他同行不必修改其目录权限或更改 docker-compose.yml 文件。
  • 由于您在尝试我的解决方案时已成功运行该项目,因此我猜该文件夹已创建。或者你确定它不存在?

标签: docker permissions docker-compose jekyll


【解决方案1】:

我有同样的问题,我从问题中了解到,图像jekyll/jekyll:3.8 在 UID 1000 下创建了一个名为 jekyll 的组和用户,这是来自 Ubuntu 的第一个用户(在我的情况)。

当您尝试使用与用户 UID 1000 不同的另一个用户运行您的撰写文件时,您挂载的卷的所有者来自该当前用户,这与 jekyll 的 UID 不同,然后当您的服务尝试运行时他没有权限的东西。

为了解决我在this repository 中找到的这个环境变量: JEKYLL_UID = 1000 JEKYLL_GID = 1000

在 compose 文件中添加环境变量并将值 1000 更改为当前用户的 UID。

    environment:
      JEKYLL_UID: 1001
      JEKYLL_GID: 1001

这对我来说很好。

要打印您当前的 UID:

$ echo $UID
1001

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    相关资源
    最近更新 更多