WSL Ubuntu中Docker部署MariaDB出现挂载错误求助
解决WSL Ubuntu中Docker挂载MariaDB配置文件的错误
错误原因分析
你遇到的错误核心是挂载类型不匹配:Docker尝试将本地文件挂载到容器内的目录(或反之),导致挂载失败。另外原指南中的/mnt/raid是VM环境的专属挂载点,WSL默认不存在该路径,这是问题的主要诱因。
分步解决方案
1. 验证并修正本地路径
首先检查你创建的路径是否存在:
ls -l /mnt/raid/data/mariadb/
如果输出提示No such file or directory,说明该路径在WSL中无效。建议改用WSL可正常访问的路径,比如用户家目录:
# 创建新的存储与配置目录 mkdir -p ~/docker/mariadb/storage mkdir -p ~/docker/mariadb/conf # 创建空白配置文件 touch ~/docker/mariadb/conf/my.cnf
2. 确认容器内目标路径类型
MariaDB官方镜像的/etc/mysql/my.cnf通常是指向目录的符号链接,而非直接文件。先临时启动容器验证:
docker run --rm -it mariadb/server:latest bash # 在容器内查看目标路径属性 ls -l /etc/mysql/my.cnf
如果输出显示为目录(或链接到目录),则不能直接挂载单个文件,需要挂载整个配置目录。
3. 修正MariaDB启动命令
根据上述验证结果选择对应启动方式:
情况A:容器内/etc/mysql/my.cnf是文件
如果确认是文件,使用以下命令启动:
docker run --log-opt max-size=50m --log-opt max-file=5 --name mariadb \ -v ~/docker/mariadb/storage:/var/lib/mysql \ -v ~/docker/mariadb/conf/my.cnf:/etc/mysql/my.cnf \ -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -d mariadb/server:latest
情况B:容器内/etc/mysql/my.cnf是目录
此时需要将本地配置目录挂载到MariaDB的自定义配置加载目录(如/etc/mysql/conf.d):
# 按需编辑本地配置文件内容 nano ~/docker/mariadb/conf/my.cnf # 启动容器 docker run --log-opt max-size=50m --log-opt max-file=5 --name mariadb \ -v ~/docker/mariadb/storage:/var/lib/mysql \ -v ~/docker/mariadb/conf:/etc/mysql/conf.d \ -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -d mariadb/server:latest
4. 修复WSL权限问题
WSL中文件权限可能导致容器无法访问挂载内容,执行以下命令调整权限:
chmod -R 755 ~/docker/mariadb/ chmod 644 ~/docker/mariadb/conf/my.cnf
额外优化:清理Portainer重复参数
你之前的Portainer启动命令存在重复参数(重复的-d、-p、-v),建议简化为:
sudo docker run --name portainer -d -p 9000:9000 \ --log-opt max-size=50m --log-opt max-file=5 \ --privileged \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer
内容的提问来源于stack exchange,提问作者olufemi
相关产品推荐
相关产品推荐

