如果你想在一台机器上跑多个游戏服(比如白天开帕鲁、晚上开 MC),或者受够了"装依赖把系统搞脏",Docker 是最省心的解法。
这篇讲清楚三件事:Docker 到底给开服带来什么好处、怎么用一个现成镜像五分钟起服、以及哪些游戏其实不该用 Docker。
一、先说清楚:Docker 对开服的四好处和三不适用场景
四个真实好处
| 好处 | 具体表现 |
|---|---|
| 环境隔离 | 帕鲁要 .NET、MC 要 Java 21、老游戏要 Python 2,互不打架 |
| 一条命令起/停/更新 | docker compose up -d / docker pull 就完成,不用记长串启动参数 |
| 多实例并存 | 一台机开 3 个服,各有独立端口和存档目录,不会互相踩 |
| 迁移方便 | 整个目录打包拷到新机器,docker compose up -d 就复活 |
| 误操作兜底 | 玩坏了删容器重来,宿主机系统不受影响 |
三种情况别用 Docker
- 1 核 2G 的小机器:Docker 本身有几十 MB 常驻开销,资源紧张时不如直接跑
- 需要极致性能的重度服(Squad、方舟飞升 100 人):多一层网络转发会增加一点延迟
- Windows 服务器:Windows 上的 Docker Desktop 对游戏服务端支持差,别折腾
一句话判断标准:开 1 个服、配置吃紧 → 不用 Docker;开 2 个以上服、想省运维 → 用 Docker。
二、安装 Docker(Linux)
Debian / Ubuntu
# 安装
curl -fsSL https://get.docker.com | sudo sh
# 把当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
newgrp docker
# 验证
docker --version
docker compose versionCentOS / Rocky / AlmaLinux
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER国内机器加速(重要)
国内拉镜像经常超时,配置镜像加速:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker镜像加速地址会失效,如果拉不动就换一个,或直接用官方源试试。
三、实战:用 Docker Compose 起一个幻兽帕鲁服
这是最能体现 Docker 优势的例子——官方服务端要装一堆 32 位库,用容器一行搞定。
第一步:建目录和配置文件
mkdir -p ~/palworld-docker && cd ~/palworld-docker
nano docker-compose.yml内容:
services:
palworld:
image: thijsvanloef/palworld-server-docker:latest
container_name: palworld
restart: unless-stopped
ports:
- "8211:8211/udp" # 游戏端口,必须 UDP
- "27015:27015/udp" # Steam 查询端口
environment:
- PLAYERS=16
- SERVER_PASSWORD=你的密码
- MULTITHREADING=true
- RCON_ENABLED=true
- RCON_PORT=25575
- UPDATE_ON_BOOT=true
- TZ=Asia/Shanghai
volumes:
- ./palworld-data:/palworld/Pal/Saved关键点解释:
ports里 UDP 必须显式标注/udp,只写8211:8211默认映射 TCP,游戏连不上(这是最经典的坑)volumes把存档挂到宿主机,删容器存档不丢restart: unless-stopped实现崩溃和重启后自动拉起UPDATE_ON_BOOT=true每次启动自动更新服务端
第二步:启动
docker compose up -d-d 是后台运行。第一次会拉镜像(几百 MB),看进度:
docker compose logs -f看到 Server started 或类似日志就成功了,Ctrl+C 退出日志(服务继续跑)。
第三步:放行端口
容器映射了端口,宿主机防火墙还是要放行(很多人漏这步):
sudo ufw allow 8211/udp
sudo ufw allow 27015/udp如果你用的是 NAT 型云服务器,还需要在控制台做端口映射,把外网端口指向宿主机的 8211——详见 NAT 端口映射完全指南。
第四步:常用操作
docker compose down # 停止并移除容器(存档保留)
docker compose restart # 重启
docker compose pull # 拉取新镜像
docker compose up -d # 用新镜像重建
docker compose logs -f # 看实时日志
docker exec -it palworld bash # 进容器内部四、多服并存:一台机器开三个服
Docker 的真正用武之地。在同一个目录下写多个 service,或者分多个目录各写一个 compose 文件。
推荐分目录(互不干扰,好管理):
~/servers/
├── palworld/
│ └── docker-compose.yml # 端口 8211
├── minecraft/
│ └── docker-compose.yml # 端口 25565
└── valheim/
└── docker-compose.yml # 端口 2456每个目录独立 docker compose up -d,互不影响。
内存分配要留余量
三个服同时跑,别把内存全分出去。假设机器 8G:
| 服务 | 分配 | 说明 |
|---|---|---|
| 帕鲁 | 4G | 帕鲁吃内存大户 |
| MC | 2G | 中小服够用 |
| Valheim | 1.5G | 轻量 |
| 系统 + Docker | 0.5G | 必须留 |
Docker 里限制内存:
mem_limit: 4g
memswap_limit: 4g五、哪些游戏有官方/成熟镜像
截至撰稿时,社区维护质量较高的镜像(GitHub 上星标较多、更新勤):
| 游戏 | 镜像 | 备注 |
|---|---|---|
| 幻兽帕鲁 | thijsvanloef/palworld-server-docker | 最成熟,支持自动更新 |
| 我的世界 | itzg/minecraft-server | 支持 Paper/Fabric/Forge,环境变量超全 |
| Valheim | lloesche/valheim-server | 含自动备份 |
| CS:GO / CS2 | cm2network/csgo | 社区常用 |
| Minecraft Bedrock | itzg/minecraft-bedrock-server | 基岩版专用 |
| Factorio | factoriotools/factorio | 官方风格 |
| Satisfactory | wolveix/satisfactory-server | 需要登录 Steam 账号 |
安全提醒:第三方镜像不是官方出品,拉之前看一眼 GitHub 仓库的最近更新时间和 issue 区。长期不更新的镜像不要用,游戏一更新就废。生产环境建议锁定具体版本号而非 latest。没有现成镜像怎么办?
自己写一个 Dockerfile。以 Ubuntu 为基础:
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN dpkg --add-architecture i386 && apt-get update && \
apt-get install -y --no-install-recommends \
curl lib32gcc-s1 lib32stdc++6 ca-certificates && \
rm -rf /var/lib/apt/lists/*
RUN mkdir -p /steamcmd && cd /steamcmd && \
curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar xz
RUN /steamcmd/steamcmd.sh +login anonymous \
+force_install_dir /gameserver \
+app_update 896660 validate +quit
WORKDIR /gameserver
EXPOSE 2456-2458/udp
CMD ["/gameserver/start.sh"]构建和运行:
docker build -t my-valheim .
docker run -d --name valheim -p 2456-2458:2456-2458/udp \
-v ./data:/gameserver/save my-valheim六、Docker 开服的五个坑
坑 1:端口只映射了 TCP(最常见)
ports:
- "8211:8211" # ❌ 默认 TCP,游戏连不上
- "8211:8211/udp" # ✅ 正确绝大多数 Steam 游戏走 UDP,必须显式声明。
坑 2:存档没挂载 volume,容器一删全没了
volumes:
- ./data:/path/to/save # 必须有删容器前先确认存档在宿主机:ls ./data。
坑 3:时区不对,日志时间和北京时间差 8 小时
environment:
- TZ=Asia/Shanghai或者挂载宿主机时区文件:
volumes:
- /etc/localtime:/etc/localtime:ro坑 4:容器里看不到外网,Steam 下载失败
检查 DNS:
docker run --rm busybox nslookup steamcdn-a.akamaihd.net解析失败就在 daemon.json 里指定 DNS:
{ "dns": ["223.5.5.5", "114.114.114.114"] }坑 5:磁盘被 Docker 日志和镜像吃满
Docker 默认不限制容器日志大小,跑几个月能吃几十 G:
sudo tee /etc/docker/daemon.json << 'EOF'
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
EOF
sudo systemctl restart docker
# 清理无用镜像和缓存
docker system prune -a --volumes七、Docker vs 直接部署,怎么选
| 场景 | 推荐方案 |
|---|---|
| 只开 1 个服,配置 4G 以内 | 直接部署,省资源 |
| 开 2 个以上服 | Docker |
| 新手,想一条命令搞定 | Docker(找成熟镜像) |
| 100 人重度服、追求极限性能 | 直接部署 |
| Windows 服务器 | 直接部署 |
| 经常换机器、需要迁移 | Docker |
八、总结
Docker 不是开服的必需品,但当你开始在同一台机器上折腾第二个、第三个服的时候,它会从"可选项"变成"必选项"。
上手路径建议:
- 先按各游戏的保姆级教程用原生方式开一个服,理解端口、存档、启动参数这些概念
- 熟悉后再切 Docker,用现成镜像复现一遍
- 多服并存时自然过渡到 compose 编排
📌 想省掉这些折腾?我们家的一键开服面板内置了多服管理和自动守护,NAT 价格即可开长期服 → https://z0w.cn
相关教程
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]这是本站长期维护的游戏配置与教程总索引。想开服,先在这页搞清楚两件事:你的游戏要吃多少配置、你的系统该看哪篇教程。建议收藏——换游戏、加 MOD、人数变多时,回来核对一遍能省掉大部分"卡爆了"和"连不上"。搭配阅读:还没买服务器?先看购前决策索引(预算分级 / NAT vs 独立 IP / 避坑清单);端口映射看不懂?先看端口速查表(40+ 游戏端口协议一页查清)。一、全游戏配置需求速查表下表按"[...]
2026-10-18 回复