如何不重建Docker容器更新AzerothCore设置?重建时如何保留角色?
关于AzerothCore Docker部署的设置更新与数据保留问题
刚好我之前也用Docker折腾过AzerothCore,来给你详细解答这两个问题:
一、无需重建容器就能更新服务器设置的情况
大部分日常的服务器配置修改根本不需要重建容器,分两类场景处理:
1. 修改.conf配置文件
如果部署时你已经把AzerothCore的配置目录(比如容器内的/azerothcore/etc)挂载到了宿主机本地,直接修改宿主机上对应的.conf文件,然后重启对应容器就生效:
# 重启worldserver容器,大部分配置修改只需要这个 docker-compose restart worldserver # 如果改了数据库连接这类核心配置,需要同时重启authserver docker-compose restart authserver worldserver
另外,部分非核心配置(比如经验倍率、服务器公告)甚至不用重启,登录游戏用GM账号执行命令就能热重载:
.reload config
2. 动态调整游戏内规则
很多游戏内的设置可以通过GM命令或容器控制台实时修改,完全不用碰容器:
- 调整经验倍率:
.set xp rate 5 - 修改服务器欢迎语:
.server motd "欢迎回到艾泽拉斯,冒险者!" - 重载NPC脚本:
.reload scripts
二、必须重建容器时,怎么保住角色数据
如果是要更新AzerothCore镜像版本、修改容器环境变量这类不得不重建容器的情况,只要做好数据持久化,角色数据就不会丢,具体步骤:
1. 确认数据库用了卷挂载
你的docker-compose.yml里,数据库服务(一般是mariadb)必须配置了宿主机卷挂载,比如:
services: db: image: mariadb:10.5 volumes: - ./db-data:/var/lib/mysql # 把容器内的数据库目录挂载到宿主机的./db-data environment: MYSQL_ROOT_PASSWORD: your_secure_password
这种情况下,就算删除db容器,宿主机./db-data里的数据库文件(包含auth账号库和characters角色库)会完整保留,重建容器后直接读取这些数据就行。
2. 提前备份数据库(保险操作)
为了防止意外,重建前可以手动导出备份:
# 替换<db-container-name>为你的数据库容器名,比如ac-db docker exec -it <db-container-name> mysqldump -u root -p your_password auth characters > ac-backup.sql
重建完成后,再把备份导回去:
docker exec -i <new-db-container-name> mysql -u root -p your_password < ac-backup.sql
3. 别误删持久化卷
重建容器时,千万别用docker-compose down -v(这个命令会删除所有关联的卷),只用docker-compose down停止容器,然后docker-compose up -d重新启动,挂载的卷会被自动复用,数据不会丢。
内容的提问来源于stack exchange,提问作者Jimmy




