Docker部署Laravel项目时MySQL容器启动失败(权限错误)求助
Docker部署Laravel项目时MySQL容器启动失败(权限错误)求助
大家好,我最近一周被一个问题搞到头大,实在没办法了来求助!我用Docker搭了个小型Laravel项目,但MySQL容器完全没法正常工作,总是自己崩溃。查看容器日志docker logs my-container时,会报错:
Cannot change permissions of the file 'private_key.pem.temp' (OS errno 1 - Operation not permitted)
我的配置信息如下:
.env文件配置
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=laravel_ead DB_USERNAME=sail DB_PASSWORD=root
docker-compose.yml中MySQL服务配置
mysql: image: mysql:8.0 restart: unless-stopped environment: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_USER: ${DB_USERNAME} command: ["--disable-partition-engine-check"] volumes: - ./.docker/mysql/dbdata:/var/lib/mysql - mysql-data:/var/lib/mysql ports: - 3388:3306 networks: - laravel-eti
我已经尝试过这些方法,但都没用:
- 修改端口号
- 把
DB_HOST改成127.0.0.1或者localhost - 清除Laravel缓存
- 尝试使用Sail工具
- 删除整个项目重新搭建
- 卸载并重装Docker
另外补充一下,我用的是Windows系统(WSL2环境)。在出现这个权限错误之前,每次执行php artisan migrate都会报错:
SQLSTATE[HY000] [1130] Host '172.20.0.6' is not allowed to connect to this MySQL server
针对WSL2环境的解决方案建议
方案1:改用Docker命名卷避免权限冲突
这个权限问题大概率是WSL2与Windows文件挂载的权限不兼容导致的,试试用Docker管理的命名卷替代本地目录挂载:
- 先停止并清理现有容器和卷:
docker-compose down -v - 删除本地的
.docker/mysql/dbdata目录:rm -rf ./.docker/mysql/dbdata - 修改docker-compose.yml的MySQL卷配置,只保留命名卷:
volumes: - mysql-data:/var/lib/mysql - 重新启动MySQL容器:
docker-compose up -d mysql
方案2:调整WSL2的文件挂载权限
如果一定要用本地目录挂载,可以修改WSL2的全局配置:
- 在Windows用户目录下新建或编辑
.wslconfig文件,添加以下内容:[automount] enabled = true root = /mnt/ options = "metadata,umask=0022" mountFsTab = false - 重启WSL2服务:
wsl --shutdown - 重新启动Docker和项目容器。
方案3:解决MySQL主机连接权限问题
如果后续再遇到1130错误,可以进入容器给授权用户开放所有主机访问权限:
- 进入MySQL容器:
docker exec -it <你的MySQL容器名称> mysql -uroot -proot - 执行授权SQL:
GRANT ALL PRIVILEGES ON laravel_ead.* TO 'sail'@'%' IDENTIFIED BY 'root'; FLUSH PRIVILEGES;
备注:内容来源于stack exchange,提问作者Sapinn
相关产品推荐
相关产品推荐

