WSL + Docker 文件权限问题

Posted

技术标签:

【中文标题】WSL + Docker 文件权限问题【英文标题】:WSL + Docker file permission issues 【发布时间】:2021-12-29 20:08:54 【问题描述】:

我在 WSL 环境中使用 docker-compose。目前 Wordpress 在 docker composer 中运行。 Projects 文件夹中的所有文件都位于 www-data 组和用户中,这允许 Wordpress 创建所有内容并上传插件。 但是一旦我想编辑文件,vs-code就会出现文件权限错误。

切换用户和 www-data 组允许 vs-code 编辑文件,但 Wordpress 在上传插件或删除插件/文件时出现权限错误。

wsl.conf 看起来像这样:

# Enable extra metadata options by default
[automount]
enabled = true
root = /windir/
options = "metadata,umask=22,fmask=11"
mountFsTab = false

# Enable DNS – even though these are turned on by default, we'll specify 
here just to be explicit.
[network]
generateHosts = true
generateResolvConf = true

在 Ubuntu-20.04 中使用 Win 11 - 内核:5.10.60.1 和最新的 docker 版本。

编辑: 不过,当我想在 Wordpress 中编辑内容、上传媒体或上传插件时,我需要 sudo chown -R www-data *,如果我想在 VScode 中编辑文件,我需要 sudo chown -R <username> *

【问题讨论】:

【参考方案1】:

我在本地 WordPress 开发设置中遇到了类似的问题。 (Windows 10 + WSL2),这里是 git repo 的链接: https://github.com/dorumarginean/wordpress-docker

为了上传图片/插件,我像你提到的那样更新了所有者,为了使用 Visual Studio Code 写入权限,我在我的 docker-compose.yml 中编辑了 php 容器。

用户:“1000:1000”

【讨论】:

【参考方案2】:

当我遇到类似问题时,我会这样做: 创建一个包含 www-data 和运行编辑器的用户的新组。

现在让我们呼叫您的本地用户myuser 和您的新组mygroup

首先你需要创建一个新组

sudo addgroup mygroup

将网络服务器用户和您的用户都添加到这个新组中

sudo adduser myuser mygroup
sudo adduser www-data mygroup

现在将网站目录的所有权授予这个新组。 cd 到你网站的目录,然后

sudo chown -vR :mygroup .

向组授予写入权限

sudo chmod -vR g+w .

检查以确保更改生效,ls -ld 查看文件的所有者和权限,groups myuser www-data 查看两个用户是否确实在 mygroup

然后确保重新初始化用户环境,以便更新来自新组的权限

newgrp - mygroup

您可能需要注销并重新登录才能在 GUI 中更新用户环境。

【讨论】:

以上是关于WSL + Docker 文件权限问题的主要内容,如果未能解决你的问题,请参考以下文章

wsl2 更改文件权限失败

Ubuntu WSL上权限损坏的文件,无法删除但可以访问[关闭]

SSH 权限被拒绝(公钥、密码) - 容器 docker ubuntu 18.04

WSL2中安装docker 并开机启动

WSL+samba+git:“错误:将对象添加到存储库数据库.git/objects的权限不足” / git-clone / git-add 权限错误

Ubuntu WSL Ansible - 用户@localhost 权限被拒绝(公钥,密码)