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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:36:20