
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://hub.docker.com/r/gameservermanagers/steamcmd
https://github.com/GameServerManagers/docker-steamcmd/actions
https://github.com/GameServerManagers/docker-steamcmd/blob/main/LICENSE
SteamCMD是Steam客户端的命令行版本,允许在无头服务器上下载和安装游戏/服务器应用。此容器镜像每日构建,可在https://hub.docker.com/r/gameservermanagers/steamcmd%E5%92%8Chttps://github.com/GameServerManagers/docker-steamcmd/pkgs/container/steamcmd%E8%8E%B7%E5%8F%96%E3%80%82
| 标签 | Ubuntu版本 | 标准支持结束时间* | 说明 |
|---|---|---|---|
latest, ubuntu | 24.04 LTS (Noble) | 2029年4月 | 当前LTS版本 |
ubuntu-24.04 | 24.04 LTS (Noble Numbat) | 2029年4月 | 当前LTS版本 |
ubuntu-22.04 | 22.04 LTS (Jammy Jackalope) | 2027年4月 | 上一LTS版本 |
ubuntu-20.04 | 20.04 LTS (Focal Fossa) | 2025年4月 | 旧版本(仍接收安全更新) |
*日期基于Canonical发布的LTS支持计划中的标准(免费)安全更新结束时间。扩展安全维护(ESM)可能会延长这些日期,但如果上游包(如SteamCMD依赖项)不可用,镜像可能会提前弃用。
拉取最新镜像并打开SteamCMD交互式终端:
bashdocker run -it --rm gameservermanagers/steamcmd:latest
下载并更新应用到当前主机目录(示例:Garry's Mod专用服务器 - appid 4020):
bashdocker run -it --rm \ -e PUID=$(id -u) -e PGID=$(id -g) \ -v "$PWD:/data" \ gameservermanagers/steamcmd:latest \ +force_install_dir /data +login anonymous +app_update 4020 +quit
SteamCMD将其库数据(清单、仓库、创意工坊缓存)存储在/home/steam/.local/share/Steam。我们使用+force_install_dir将应用文件放置在独立目录中。如果省略+force_install_dir(或在第一个+app_update之后放置),应用将安装在:
text/home/steam/.local/share/Steam/steamapps/common/<应用名称>
使用独立挂载(如/data)并配合+force_install_dir /data可将应用文件与Steam库缓存分离。
bashdocker run -it --rm \ -e PUID=$(id -u) -e PGID=$(id -g) \ -v "$PWD:/data" \ -v "/path/on/host/steamcmd-app:/home/steam/.local/share/Steam" \ gameservermanagers/steamcmd:latest \ +force_install_dir /data +login anonymous +app_update 4020 +quit
bashdocker volume create steamcmd-data docker volume create steamcmd-app docker run -it --rm \ -v "steamcmd-data:/data" \ -v "steamcmd-app:/home/steam/.local/share/Steam" \ gameservermanagers/steamcmd:latest \ +force_install_dir /data +login anonymous +app_update 4020 +quit
镜像使用非root用户steam(默认UID:GID 1000:1000)。可通过环境变量PUID和PGID在运行时覆盖这些ID;入口点会在执行SteamCMD前映射用户/组,使创建的文件与主机用户匹配。
bashdocker run --rm \ -e PUID=1001 -e PGID=1001 \ -v "$PWD/steam-app:/home/steam/.local/share/Steam" \ -v "$PWD/server-data:/data" \ gameservermanagers/steamcmd:latest \ +force_install_dir /data +login anonymous +app_update 4020 +quit
也可修改构建时默认值(大多数用户不需要):
bashdocker build --build-arg PUID=1001 --build-arg PGID=1001 -t steamcmd:uid1001 -f Dockerfile.ubuntu-2404 .
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 文件未显示在目录中 | 主机目录由不同UID拥有 | 使用匹配的PUID/PGID或更改主机目录所有权 |
| 每次运行都需要Steam Guard代码 | Sentry文件未持久化(无卷或不可写) | 挂载并确保Steam数据目录的所有权 |
| 主机挂载中出现root拥有的文件 | 使用--user root运行容器 | 移除--user;使用PUID/PGID环境变量 |
SteamCMD支持和认证登录。尽可能使用登录。
bashdocker run --rm \ -e PUID=$(id -u) -e PGID=$(id -g) \ -v "$PWD/steam-app:/home/steam/.local/share/Steam" \ -v "$PWD/server-data:/data" \ gameservermanagers/steamcmd:latest \ +force_install_dir /data +login anonymous +app_update 4020 +quit
某些应用(如特定私有分支、工具或测试版仓库)需要Steam账户。
无状态(无持久Steam数据)
首次使用几乎总会触发Steam Guard,之后也可能再次触发,因为没有数据持久化:
bashdocker run --rm \ -e PUID=$(id -u) -e PGID=$(id -g) \ -v "$PWD/server-data:/data" \ gameservermanagers/steamcmd:latest \ +@ShutdownOnFailedCommand 1 +force_install_dir /data \ +login "${STEAM_USER}" "${STEAM_PASS}" +app_update 223350 +quit
持久化(推荐)
持久化/home/steam/.local/share/Steam,使sentry(guard)文件被缓存,后续运行无需代码提示。
bashdocker run --rm \ -e PUID=$(id -u) -e PGID=$(id -g) \ -v "$PWD/steam-app:/home/steam/.local/share/Steam" \ -v "$PWD/server-data:/data" \ gameservermanagers/steamcmd:latest \ +@ShutdownOnFailedCommand 1 \ +force_install_dir /data \ +login "${STEAM_USER}" "${STEAM_PASS}" +app_update 223350 +quit
建议:
+login user pass CODE(第三个参数),或交互式运行一次以在挂载的Steam目录中缓存sentry文件。可在镜像名称后链式添加的常用命令/标志(顺序重要;见下方说明):
| 命令/标志 | 用途 | 示例片段 |
|---|---|---|
+login anonymous | ***登录(大多数专用服务器支持) | +login anonymous |
+login <user> <pass> | 认证登录(某些应用/私有测试版需要) | +login myuser mypass |
+@NoPromptForPassword 1 | 抑制交互式密码/Guard提示(快速失败) | +@NoPromptForPassword 1 +login myuser mypass |
+@ShutdownOnFailedCommand 1 | 若命令失败则中止剩余命令 | +@ShutdownOnFailedCommand 1 |
+force_install_dir <path> | 设置应用文件目标目录(必须在+app_update之前) | +force_install_dir /data |
+app_update <appid> | 安装或更新应用(服务器/游戏) | +app_update 896660 |
+app_update <appid> validate | 完整性检查并重新下载缺失/损坏文件(较慢) | +app_update 740 validate |
+app_status <appid> | 打印安装状态/进度(调试) | +app_status 896660 |
+app_info_update 1 | 刷新应用信息缓存(查询详情前使用) | +app_info_update 1 |
+workshop_download_item <appid> <itemid> | 下载特定创意工坊项目 | +workshop_download_item 4020 3418671232 |
+download_depot <appid> <depotid> <manifest> | 获取特定仓库/清单(版本固定) | +download_depot 90 90 402078904020789 |
+sSteamCmdForcePlatformType <os> | 强制内容平台(Linux/Windows/macOS) | +sSteamCmdForcePlatformType windows |
+runscript <file> | 从脚本文件执行命令批处理 | +runscript /scripts/install.txt |
+quit | 完成前序命令后退出steamcmd | +quit |
+@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +force_install_dir /data +login ... +app_update <appid> validate +quit+force_install_dir必须放在第一个+app_update之前,否则文件会进入默认库(/home/steam/Steam/steamapps)。validate;仅在初始安装或怀疑损坏时使用。+runscript);每行应镜像内联形式(无shell引用问题)。+download_depot可能需要认证登录和正确的分支访问权限;清单是版本特定的。Q: 如何查找appid?
搜索SteamDB并使用显示的数字App ID。
Q: 为什么出现"连接失败"或SSL错误?
通常是临时网络问题或防火墙DPI干扰。重试,或确保出站TCP 27015/27036和HTTPS端口开放。
Q: 能否在一次容器调用中运行多个更新?
可以,链式添加多个+app_update命令或使用包含每行一个命令的运行脚本文件。
Q: 是否需要暴露端口?
下载内容不需要。游戏服务器端口由使用下载文件构建/运行的单独服务器容器处理。
此容器基于https://github.com/steamcmd/docker%E5%AE%B9%E5%99%A8%EF%BC%8C%E4%B8%BB%E8%A6%81%E7%94%A8%E4%BA%8ELinuxGSM%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%82
以下是 gameservermanagers/steamcmd 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



来自真实用户的反馈,见证轩辕镜像的优质服务