Docker化CodeIgniter4项目在WSL2运行遇权限及资源加载问题
WSL2 + Docker 运行 CodeIgniter 4 权限问题解决方案
核心问题根源
WSL2 环境下,容器内 www-data 用户的 UID/GID 与 WSL 本地用户不匹配,或是 Windows 挂载目录的 POSIX 权限限制,导致 CodeIgniter 4 无法读写缓存、日志目录,进而触发 403 或文件操作错误。
解决方案1:统一容器与WSL用户UID/GID
容器默认 www-data 的 UID 为33、GID为33,与WSL默认用户(通常UID/GID为1000)不匹配,是权限冲突的主要原因。
- 获取WSL用户UID/GID
在WSL终端执行:
id -u # 输出当前用户UID,如1000 id -g # 输出当前用户GID,如1000
- 修改Dockerfile
在Dockerfile末尾添加用户UID/GID调整命令,并完善权限设置:
# 调整www-data用户的UID/GID匹配WSL本地用户 RUN usermod -u 1000 www-data && groupmod -g 1000 www-data # 确保CodeIgniter4所需可写目录权限正确 RUN mkdir -p writable/cache writable/logs writable/sessions writable/uploads RUN chown -R www-data:www-data writable/ RUN chmod -R 775 writable/
- 重建镜像并重启容器
docker-compose build --no-cache docker-compose down && docker-compose up -d
解决方案2:处理Windows挂载目录(/mnt下)的权限限制
Windows文件系统挂载到WSL时,不支持chown/chmod修改POSIX权限,会导致CodeIgniter4无法修改日志文件权限。
- 配置WSL自动挂载参数
编辑/etc/wsl.conf(不存在则创建):
[automount] enabled = true options = "metadata,umask=0022,fmask=0133" mountFsTab = false
执行wsl --shutdown重启WSL后生效。
- 禁用CodeIgniter4的日志文件权限修改
在app/Config/Logger.php中修改配置:
public $filePermissions = null;
避免框架尝试修改日志文件权限触发报错。
解决方案3:修复CSS加载异常问题
CSS加载异常通常是路径配置或静态文件权限问题:
- 修正CodeIgniter4基础URL
在app/Config/App.php中设置正确的BaseURL:
public $baseURL = 'http://localhost:8001/public/';
- 确保静态文件权限正常
在WSL终端执行,赋予静态文件可读权限:
chmod -R 755 public/assets/
额外建议
- 优先将项目放在WSL内部文件系统(如
/home/你的用户名/项目目录),性能更优且权限兼容性更好。 - 若使用WSL内部文件系统,先执行
chown -R $USER:$USER .确保当前用户拥有项目文件所有权。
内容的提问来源于stack exchange,提问作者Mateus Peres
相关产品推荐
相关产品推荐

