You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)不匹配,是权限冲突的主要原因。

  1. 获取WSL用户UID/GID
    在WSL终端执行:
id -u  # 输出当前用户UID,如1000
id -g  # 输出当前用户GID,如1000
  1. 修改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/
  1. 重建镜像并重启容器
docker-compose build --no-cache
docker-compose down && docker-compose up -d

解决方案2:处理Windows挂载目录(/mnt下)的权限限制

Windows文件系统挂载到WSL时,不支持chown/chmod修改POSIX权限,会导致CodeIgniter4无法修改日志文件权限。

  1. 配置WSL自动挂载参数
    编辑/etc/wsl.conf(不存在则创建):
[automount]
enabled = true
options = "metadata,umask=0022,fmask=0133"
mountFsTab = false

执行wsl --shutdown重启WSL后生效。

  1. 禁用CodeIgniter4的日志文件权限修改
    在app/Config/Logger.php中修改配置:
public $filePermissions = null;

避免框架尝试修改日志文件权限触发报错。


解决方案3:修复CSS加载异常问题

CSS加载异常通常是路径配置或静态文件权限问题:

  1. 修正CodeIgniter4基础URL
    在app/Config/App.php中设置正确的BaseURL:
public $baseURL = 'http://localhost:8001/public/';
  1. 确保静态文件权限正常
    在WSL终端执行,赋予静态文件可读权限:
chmod -R 755 public/assets/

额外建议

  • 优先将项目放在WSL内部文件系统(如/home/你的用户名/项目目录),性能更优且权限兼容性更好。
  • 若使用WSL内部文件系统,先执行chown -R $USER:$USER .确保当前用户拥有项目文件所有权。

内容的提问来源于stack exchange,提问作者Mateus Peres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:58:28