最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Wsl解决MySQL容器跨域权限问题小结
时间:2026-07-21 09:48:48 编辑:袖梨 来源:一聚教程网
在使用WSL(Windows Subsystem for Linux)中运行MySQL容器时,可能会遇到跨域权限问题,尤其是在尝试从外部客户端(如浏览器或移动应用)访问MySQL服务时。这类问题通常与CORS(跨源资源共享)策略有关,而不是直接的MySQL容器权限问题。

问题分析
通过查阅资料,可以知道主要原因在于Mysql 容器运行时,容器内部需要特殊执行角色账户,而通过Wsl 从宿主目录映射到子系统内部,中间转换过程中,无法正常映射角色权限,导致目录绑定跨域宿主-子系统-docker容器出现权限不足。子系统挂载数据库目录失败,虽然目录中创建了对应的初始化数据配置,实际运行时,容器服务内部无法正常运行。
实际报错日志如下:
mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)
解决办法
解决办法是,不把当前windows对应路径挂在到容器中,使用命名数据卷进行数据持久化,将权限交由容器内部处理,不过度干涉,创建过程如下:
sudo docker volume create [volume_name]
查看命名数据卷信息。
sudo docker volume inspect [volume_name]
输出如下:
[ { "CreatedAt": "2026-07-16T18:49:17+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/[volume_name]/_data", "Name": "mysql_data", "Options": null, "Scope": "local" }实际真实目录挂载点在wsl 子系统中。不管运行之后容器是否删除,命令数据卷在没被删除之前,内部数据均存在。
挂载时,命令行执行命令如下:
sudo docker -v [volume_name]:/var/lib/mysql ....
使用docker-compose 时,有两种方式,一种是直接引入当前已经创建的命令数据卷,一种是指定数据卷名称,由docker-compose 运行配置配置过程中进行指定创建。
使用已存在命名数据卷。
version: '3.8'services: mysql: image: mysql:8.4.10 container_name: mysql volumes: - mysql_data:/var/lib/mysql # 数据持久化#...volumes: mysql_data: external: true
自定义创建。
version: '3.8'services: mysql: image: mysql:8.4.10 container_name: mysql volumes: - mysql_data:/var/lib/mysql # 数据持久化 #...volumes: mysql_data:
通过查看数据卷列表。
sudo docker volume ls
可以看到一个以[servicename]_[volumename] 命名的数据卷。
DRIVER VOLUME NAMElocal mysql_mysql_data