Docker中未挂载.cnf卷的MariaDB配置文件修改方法求助
解决方法
针对你的情况,有两种实用的方式来配置MariaDB容器的.cnf文件,都是适合Docker新手的操作:
方法一:直接挂载宿主机配置文件(推荐,持久化配置)
这是Docker管理配置的标准方式,配置文件存在宿主机,容器销毁重启也不会丢失:
- 停止当前运行的MariaDB容器
先查容器名或ID:docker ps,然后停止:docker stop <你的容器名/容器ID> - 在宿主机创建配置目录和文件
比如在用户目录下建个专门存MariaDB配置的文件夹:
然后用宿主机的编辑器(比如Ubuntu自带的mkdir -p ~/mariadb/confignano或vim)创建配置文件~/mariadb/config/my.cnf,写入你需要的配置,示例:[mysqld] max_connections = 500 innodb_buffer_pool_size = 1G # 其他你需要的参数都可以加在这里 - 重新启动容器并挂载配置
启动时把宿主机的配置目录挂载到MariaDB容器的配置加载目录(容器会自动加载/etc/mysql/conf.d/下的.cnf文件),同时如果要保留原来的数据,记得把容器的数据目录也挂载出来(如果之前没挂载,先把旧容器的数据拷贝到宿主机):- 先拷贝旧容器的数据到宿主机(如果之前没挂载数据卷):
docker cp <旧容器ID/名>:/var/lib/mysql ~/mariadb/data - 启动新容器(可以用原来的容器名,前提是旧容器已经停止并删除:
docker rm <旧容器名>):docker run -d \ --name <你的容器名> \ -v ~/mariadb/config:/etc/mysql/conf.d \ -v ~/mariadb/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=<你的root密码> \ -p 3306:3306 \ mariadb
- 先拷贝旧容器的数据到宿主机(如果之前没挂载数据卷):
方法二:临时修改容器内配置再导出(适合快速调整)
如果不想马上重新建容器,可以先临时给容器装编辑器修改,再把配置导出到宿主机:
- 进入容器并安装编辑器
执行命令进入容器的bash终端,然后用apt安装nano:docker exec -it <你的容器名/ID> bash apt update && apt install nano -y - 修改容器内的配置文件
MariaDB的主配置文件一般在/etc/mysql/mariadb.conf.d/50-server.cnf,编辑它:
修改完成后按nano /etc/mysql/mariadb.conf.d/50-server.cnfCtrl+O保存,Ctrl+X退出。 - 把修改后的配置拷贝到宿主机
退出容器后,执行拷贝命令:docker cp <你的容器名/ID>:/etc/mysql/mariadb.conf.d/50-server.cnf ~/mariadb/config/my.cnf - 后续转为挂载方式
之后重启容器时,就可以用方法一的挂载命令,避免下次容器重启丢失配置。
注意事项
- 容器内部的修改都是临时的,容器删除后所有内部修改都会消失,所以一定要用宿主机挂载的方式持久化配置和数据。
- 如果不确定MariaDB容器的配置加载路径,可以进入容器后执行
mysql --help | grep my.cnf查看它会读取哪些位置的配置文件。
内容的提问来源于stack exchange,提问作者milhouse1312
相关产品推荐
相关产品推荐

