Wsl解决MySQL容器跨域权限问题

问题分析

通过查阅资料,可以知道主要原因在于Mysql 容器运行时,容器内部需要特殊执行角色账户,而通过Wsl 从宿主目录映射到子系统内部,中间转换过程中,无法正常映射角色权限,导致目录绑定跨域宿主-子系统-docker容器出现权限不足。子系统挂载数据库目录失败,虽然目录中创建了对应的初始化数据配置,实际运行时,容器服务内部无法正常运行。

实际报错日志如下:

bash 复制代码
mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)

解决办法

解决办法是,不把当前windows对应路径挂在到容器中,使用命名数据卷进行数据持久化,将权限交由容器内部处理,不过度干涉,创建过程如下:

bash 复制代码
sudo docker volume create [volume_name]

查看命名数据卷信息。

bash 复制代码
sudo docker volume inspect [volume_name]

输出如下:

bash 复制代码
[
    {
        "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 子系统中。不管运行之后容器是否删除,命令数据卷在没被删除之前,内部数据均存在。

挂载时,命令行执行命令如下:

bash 复制代码
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

自定义创建。

bash 复制代码
version: '3.8'
services:
  mysql:
    image: mysql:8.4.10
    container_name: mysql
    volumes:
      - mysql_data:/var/lib/mysql       # 数据持久化
    #...
volumes:
  mysql_data:

通过查看数据卷列表。

bash 复制代码
sudo  docker volume ls

可以看到一个以[servicename]_[volumename] 命名的数据卷。

bash 复制代码
DRIVER    VOLUME NAME
local     mysql_mysql_data
相关推荐
文人sec39 分钟前
grant 之后要跟着 flush privileges 吗?要不要使用分区表?
数据库·mysql·adb·数据分析
高级程序源1 小时前
django招聘网站信息爬取与分析系统79704-计算机课程设计、毕业设计
后端·python·mysql·小程序·django·flask·课程设计
毕业设计7032 小时前
(免费领源码) SpringBoot 游戏交易平台17600-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·spring boot·mysql·决策树·mybatis·idea·推荐算法
溪语流沙2 小时前
Django + Vue电商项目第001讲:开篇|注册登录加增删改查,那不是电商
redis·python·mysql·docker·typescript·django·vue
程序员阿黄3 小时前
基于 Django 与 Vue 3 的智能实验室预约系统设计与实现
后端·python·mysql·django·vue·毕设
一直在努力学习的菜鸟4 小时前
Docker Info 详细解析(Rocky Linux 8.10 / Docker 29.8.1)
docker
小马同学-4 小时前
crictl实战:K8s容器运行时排障工具
容器·k8s·crictl
Sirens.4 小时前
MySQL数据库:JDBC编程
数据库·mysql
连山齐名4 小时前
MySQL八股文面试题
mysql
逐流人5 小时前
Containerd容器管理实战:从架构原理到nerdctlcrictl工具链
linux·运维·云原生·容器·云计算·containerd