Docker快速开服核心是选对镜像、挂对数据、配好环境:优先用itzg/minecraft-server等成熟镜像,数据挂载到宿主机持久化,配置通过环境变量注入,并用docker-compose统一管理多实例与资源限制。

用 Docker 快速开服,核心就三点:选对镜像、挂对数据、配好环境。不折腾系统依赖,不重复手动配置,一次写好,随时重装或迁移。
优先用成熟镜像,别从零造轮子
社区维护的镜像已解决大部分兼容性问题,直接拉取即用:
-
Minecraft:用
itzg/minecraft-server,自动处理 EULA、Java 版本、world 初始化 -
Valheim:选
linuxserver/valheim,内置信号转发,支持平滑重启 -
Palworld:推荐
ghcr.io/thijsvanloot/palworld-server,UDP 端口、存档路径、配置热加载都预设好了 - 自建 Unity 服务器时,基础镜像建议用
ubuntu:22.04或ubuntu:22.04-slim;避开 Alpine,避免 musl 与 Unity 运行时的兼容问题
数据和配置必须外挂,严禁打进镜像
容器是临时的,数据必须持久化。所有运行时生成的内容——世界存档、玩家数据、日志、配置文件——全得挂载到宿主机:
- 统一用
-v /宿主机路径:/data挂载(多数镜像默认读取/data) - 例如 Palworld:挂
/srv/palworld/data:/palworld和/srv/palworld/config:/config - 例如 Minecraft:挂
/home/mc/data:/data,首次启动后自动生成server.properties和world目录 - 配置修改后,只需
docker restart 容器名,无需重建镜像或重装服务
用环境变量传参,别硬编码配置
把可变参数抽出来,启动时注入,既安全又灵活:
- 通用参数:
-e EULA=TRUE -e MEMORY=4G -e LEVEL=Hardcore - 敏感信息如 RCON 密码、数据库密码,走
--env-file .env或 Swarm 下的 Docker Secrets - 端口、保存路径、地图名称等,也尽量通过环境变量控制,让同一镜像适配多实例
- 启动脚本里用
${MEMORY}替换 JVM 参数,用${LEVEL}写入配置文件,逻辑清晰且易维护
用 docker-compose.yml 管理正式服
单条 docker run 适合验证,但开服上线必须用 Compose:
- 端口映射、重启策略(
restart: unless-stopped)、资源限制(mem_limit)、网络隔离一目了然 - 多个服务联动更简单,比如 AzerothCore 需要
ac-database+ac-authserver+ac-worldserver三容器协同 - 批量操作方便:
docker compose up -d启动全部,docker compose down干净关闭 - 部署命令示例(Palworld):
services:
palworld:
image: ghcr.io/thijsvanloot/palworld-server:latest
container_name: palworld
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- PORT=8211
ports:
- "8211:8211/udp"
volumes:
- ../data:/palworld
- ../config:/config











