
thetestgame/steam注意:这不是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应设置的值。
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
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、备份)等。
bashsu - steam -c "/data/server/srcds_run -console -game left4dead -map l4d_hospital01_apartment -port 27015 +maxplayers 4 -nohltv +exec server.cfg"
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"
适用于需要正常关闭以保存状态的服务器:
首先在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进程管理工具,适用于复杂服务器管理。
/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在美国和/或其他国家的商标和/或注册商标。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务