【问题标题】:Docker Wordpress tar: <file> Cannot change ownership to uid 33, gid 33: Operation not permittedDocker Wordpress tar:<file> 无法将所有权更改为 uid 33、gid 33:不允许操作
【发布时间】:2019-01-25 09:23:23
【问题描述】:

我已经使用 Wordpress 创建了一个用于本地开发的 docker-compose 文件,我终于让 NFS 工作了(由于 Docker / Mac 问题,正常的卷安装太慢了)。

除了遇到新问题外,NFS 共享(即 wp_content 文件夹)中的所有文件都会出现这样的错误:

tar: ./wp-content/themes/twentynineteen/archive.php: 
Cannot change ownership to uid 33, gid 33: Operation not permitted

我发现了这个问题https://github.com/docker-library/wordpress/issues/137,他们在其中提到了https://github.com/docker-library/wordpress/pull/249,但我仍然无法让它工作。想知道是否有人可以帮助我,这是我的 docker-compose 文件:

version: '3.3'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "80:80"
    restart: always
    volumes:
      - nfsmount:/var/www/html/wp-content
      - ./.htaccess:/var/www/html/.htaccess:cached
      - ./wp-data/wp-config.php:/var/www/html/wp-config.php:cached
      - ./logs/debug.log:/var/www/html/wp-content/debug.log
    environment:
      APACHE_RUN_USER: www-data
      APACHE_RUN_GROUP: www-data

volumes:
  nfsmount:
    driver: local
    driver_opts:
      type: nfs
      o: addr=host.docker.internal,rw,nolock,hard,nointr,nfsvers=3
      device: ":/Users/myuser/Sites/dockertest/wp-data/wp-content" 

【问题讨论】:

    标签: wordpress macos docker apache2


    【解决方案1】:

    该错误是由 tar 命令尝试更改所有者报告的。

    为了避免 tar 设置所有者,您可以将变量 TAR_OPTIONS 设置为 --no-same-owner
    来自tar manual

    --没有相同的所有者
    以自己的身份提取文件(普通用户默认)。

    你可以在你的 docker-compose 文件中添加这个:

      TAR_OPTIONS: --no-same-owner
    

    【讨论】:

    • 给你,你帮了我很大的忙。不幸的是,我在奖励赏金方面有点延迟,所以在接受您的回答之前,我又增加了 100 的赏金。 TAR_OPTIONS 环境变量成功了,docker-compose 返回“完成!Wordpress 已成功复制到 /var/www/html”,没有任何错误。
    • 我刚看到我必须单独奖励赏金,我可以在 23 小时内奖励新的赏金,所以我明天再做;)
    • @ErikvandeVen:谢谢,我发现这个构建了一些使用 root 并且没有与原始 tar 对应的用户的 docker。
    【解决方案2】:

    您遇到的问题是您正在使用用户权限而不是www-data 安装本地卷。因此,www-data 无法更改您的用户拥有的文件的权限。要修复它,您应该能够执行chown 33:33 -R /Users/myuser/Sites/dockertest/wp-data/wp-content。请记住,如果您收到类似 Permissions denied 的错误消息,请使用 sudo 运行命令。

    【讨论】:

    • 我知道权限是问题,但我需要我的 docker 实例的解决方案。我提供的链接似乎已经为这个问题提供了解决方案,问题是他们没有展示如何使用这些设置配置 docker-compose 文件。我不能只更改本地文件夹的所有者,因为 docker 必须能够通过其内部用户访问它
    • 据我所知,如果不更改磁盘上的用户 ID,您无法更改 docker-compose 文件中的文件权限
    • 但是如果你仔细想想,将我自己的文件夹的所有者和我自己的文件一起更改为 Docker 用户,这样它就可以访问它是没有意义的。至少我必须能够拥有一个普通用户或其他什么,这样我仍然可以访问自己的文件,docker 也可以。
    • 您可以只更改文件的 uid 并保持 gid 不变,这样您仍然可以访问您的文件,但也允许 docker 访问它们。
    【解决方案3】:

    首先,您可以尝试将 nocopy 的附加音量选项设置为 True

    如果这不起作用,也许你检查组 www-data 是其中的一部分。 我认为如果您想将用户和组设置为 www-data,请确保 www-data 与 nfs 共享文件夹属于同一组。

    否则,最好使用有权访问 nfs 文件的本地用户和组。

    APACHE_RUN_USER  : local_user
    APACHE_RUN_GROUP : local_group
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 2020-12-22
      • 2021-06-05
      相关资源
      最近更新 更多