
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
注意:这不是Valve官方的Steam Docker容器。
该Docker镜像提供了一个通用的Steam专用服务器运行环境,基于steamcmd工具构建,支持部署Linux原生服务器和通过wine运行的Windows服务器。镜像基于Ubuntu系统,包含wine环境和最新的steamcmd工具,适用于搭建各类Steam游戏的专用服务器。
适用于需要搭建Steam游戏专用服务器的场景,已验证支持:
| 标签 | 描述 |
|---|---|
| stable | Ubuntu 24.10:包含wine和steamcmd(包管理安装) |
| latest | Ubuntu 24.10:包含winehq STABLE包和steamcmd(包管理安装),可能会中断 |
| experimental | Ubuntu 24.10:包含winehq STAGING包和steamcmd(包管理安装),可能会中断 |
容器每周自动重建以保持更新
| 参数 | 功能描述 | 默认值 |
|---|---|---|
| SERVER_DIR | 服务器文件存储位置 | /data/server |
| STEAM | steamcmd客户端位置 | /steam |
| PLATFORM | 指定自动更新时的平台,可选linux或windows | windows |
| STEAM_APP_ID | 用于自动更新的Steam应用ID | 0 |
| STEAM_APP_EXTRAS | 可选,Steam应用更新的额外参数(如设置BETA版本) | `` |
| UPDATE_OS | 启动时更新操作系统,1启用,0禁用 | 1 |
| UPDATE_STEAM | 启动时更新steamcmd,1启用,0禁用 | 1 |
| UPDATE_SERVER | 启动时更新STEAM_APP_ID指定的服务器,1启用,0禁用 | 1 |
| PUID | 运行steamcmd的用户ID,同时用于卷权限设置 | 1000 |
| PGID | 运行steamcmd的组ID,同时用于卷权限设置 | 1000 |
| LANG | 容器内语言环境 | en_US.UTF-8 |
| LANGUAGE | 容器内语言环境 | en_US:UTF-8 |
| LC_ALL | 容器内语言环境 | en_US.UTF-8 |
容器默认暴露以下端口,可根据需要在Docker配置中添加额外端口。详细Steam端口要求见Steam官方文档。
| 端口 | 协议 | 是否必需 | 描述 |
|---|---|---|---|
27015 | UDP | 必需 | 游戏流量端口 |
27015 | TCP | 可选 | SRCDS RCON端口 |
27016 | UDP | 可选 | Steam公告流量端口 |
| 卷路径 | 功能描述 |
|---|---|
| /data | 镜像的用户数据存储位置 |
使用数据卷(-v参数)时,主机和容器之间可能出现权限问题。通过PUID和PGID环境变量可指定容器内运行应用的用户ID和组ID,避免权限冲突。
在主机上执行以下命令获取当前用户的ID:
bashid <username>
输出示例:
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser),4(adm),24(cdrom),27(sudo),46(plugdev),113(lpadmin)
其中uid(用户ID)和gid(组ID)即为PUID和PGID应设置的值。
Windows专用服务器
yaml--- version: "3" services: steam: image: thetestgame/steam:stable restart: unless-stopped ports: - 27015:27015 - 27015:27015/udp - 27016:27016/udp environment: - PUID=1000 - PGID=1000 - UPDATE_OS=1 - UPDATE_STEAM=1 - UPDATE_SERVER=1 - PLATFORM=windows - STEAM_APP_ID=443030 # Conan Exiles的Steam应用ID - TZ=America/Los_Angeles volumes: - /my/docker/server/data:/data - /etc/localtime:/etc/localtime:ro
Linux专用服务器
yaml--- version: "3" services: steam: image: thetestgame/steam:stable restart: unless-stopped ports: - 27015:27015 - 27015:27015/udp - 27016:27016/udp environment: - PUID=1000 - PGID=1000 - UPDATE_OS=1 - UPDATE_STEAM=1 - UPDATE_SERVER=1 - PLATFORM=linux - STEAM_APP_ID=294420 # Left 4 Dead 2的Steam应用ID - TZ=America/Los_Angeles volumes: - /my/docker/server/data:/data - /etc/localtime:/etc/localtime:ro
容器启动时会执行/data/custom_server脚本,必须手动创建此脚本并设置为可执行文件。该脚本用于配置服务器启动参数、前置操作(如安装mod、备份)等。
Linux服务器示例(Left 4 Dead)
bashsu - steam -c "/data/server/srcds_run -console -game left4dead -map l4d_hospital01_apartment -port 27015 +maxplayers 4 -nohltv +exec server.cfg"
Windows服务器示例(Conan Exiles)
bashsu - steam -c "xvfb-run --auto-servernum \ wine64 ${SERVER_DIR}/ConanSandbox/Binaries/Win64/ConanSandboxServer-Win64-Test.exe -nosteamclient -game -server -log"
注意:Windows服务器需要轻量级窗口管理器支持,
xvfb-run --auto-servernum用于提供虚拟显示环境。
无状态服务器脚本
适用于不需要在重启间保存状态的服务器:
Windows
bashsu - steam -c "xvfb-run --auto-servernum \ wine64 ${SERVER_DIR}/ConanSandbox/Binaries/Win64/ConanSandboxServer-Win64-Test.exe -nosteamclient -game -server -log"
Linux
bashsu - steam -c "/data/server/startserver.sh \ -configfile=/data/server/serverconfig.xml"
带状态保存的服务器脚本(Bash)
适用于需要正常关闭以保存状态的服务器:
首先在docker-compose中设置适当的关闭等待时间:
yamlservices: steam: image: thetestgame/steam:latest restart: unless-stopped stop_grace_period: 1m # 给予1分钟关闭时间 # 其他配置...
创建/data/custom_server脚本:
bash#!/bin/bash PROCESS_WAIT_TIME=25 WATCHDOG_TIME=300 function shutdown() { echo 'Shutting down server ...' if [ "$(pgrep -n Conan)" != '' ]; then echo "Sending SIGINT to Conan server (max ${PROCESS_WAIT_TIME} secs) ..." kill -SIGINT `pgrep -n Conan` sleep ${PROCESS_WAIT_TIME} fi if [ "$(pgrep wine)" != '' ]; then echo "Sending SIGINT to wine processes (max ${PROCESS_WAIT_TIME} sec) ..." kill -SIGINT `pgrep wine` sleep ${PROCESS_WAIT_TIME} fi exit 0 } trap shutdown SIGINT SIGKILL SIGTERM function start_server() { su - steam -c "xvfb-run --auto-servernum wine64 ${SERVER_DIR}/ConanSandbox/Binaries/Win64/ConanSandboxServer-Win64-Test.exe -nosteamclient -game -server -log" } function watch_server() { if ps aux | grep [C]onanSandboxServer > /dev/null; then echo 'Server is running ...' else echo 'Starting server ...' start_server & fi } while true; do watch_server sleep ${WATCHDOG_TIME} & wait done
使用Supervisord管理服务器
容器内置supervisord进程管理工具,适用于复杂服务器管理。
/data/custom_server脚本设置为:bash/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
/data/supervisord目录中放置supervisord配置文件,示例配置:ini[program:conanexiles] command=xvfb-run --auto-servernum wine64 ${SERVER_DIR}/ConanSandbox/Binaries/Win64/ConanSandboxServer-Win64-Test.exe -nosteamclient -game -server -log user=steam autostart=true autorestart=true stopasgroup=true killasgroup=true
winetricks工具已安装在/usr/bin/winetricks,可在custom_server脚本中用于配置Windows服务器依赖:
bashsu - steam -c "winetricks dotnet472" # 安装.NET Framework 4.7.2 su - steam -c "winetricks vcrun2013" # 安装Visual C++ 2013运行库
ZFS文件系统上可能出现此错误,需设置显式配额:
bashsudo zfs set quota=2T zpool1/docker
Wine首次启动可能因初始化环境而延迟,后续启动会加快。可手动执行以下命令缓解:
bashxvfb-run --autoservernum wineboot --update
srcds_run无法写入PID文件时,手动指定PID文件路径:
bashsrcds_run ... -pidfile /data/server/game.pid
确保使用su - steam -c加载完整用户环境,或链接steamclient.so:
bashln -s -f /steam/.steam/steamcmd/linux32/steamclient.so /steam/.steam/sdk32/steamclient.so
Steam Logo、SteamCMD ©2019 Valve Corporation。Steam及Steam徽标是Valve Corporation在美国和/或其他国家的商标和/或注册商标。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务