
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
核心功能 • 最低要求 • 快速部署 • 环境变量 • 动态初始物品 • 持久化卷 • 安全与权限
这是一个高性能的Terraria服务器Docker镜像,集成TShock插件,专注自动化、数据安全、详细监控,且完全采用无root(Rootless)架构。
https://hub.docker.com/r/finallf/terraria
https://hub.docker.com/r/finallf/terraria
https://hub.docker.com/r/finallf/terraria
https://hub.docker.com/r/finallf/terraria
https://github.com/finallf/terraria
https://github.com/finallf/terraria
https://github.com/finallf/terraria
https://github.com/finallf/terraria
[!IMPORTANT] ✔️ 正常运行的Docker环境
✔️ 基础Docker知识
若需测试容器,使用以下命令:
bashdocker run --rm -di --name terraria finallf/terraria:latest
推荐使用Docker Compose运行服务器:
compose.yml文件,调整卷路径至您的环境:ymlservices: terraria: image: finallf/terraria:latest container_name: terraria stdin_open: true tty: false environment: - SERVER_PASSWORD=yourpassword123 - WORLD_NAME=我的Terraria世界 volumes: # 映射目录以持久化数据 - ./terraria/config:/tshock/config - ./terraria/logs:/tshock/logs - ./terraria/crashes:/tshock/crashes - ./terraria/plugins:/tshock/plugins - ./terraria/worlds:/tshock/worlds ports: - "7777:7777" # 游戏端口 - "7878:7878" # REST API端口(可选) restart: unless-stopped
以上是最低配置,更多设置请参考环境变量部分。
1000有正确权限(容器默认运行UID为1000)。compose.yml所在目录执行:bashdocker compose up -d
容器运行后,打开Terraria客户端,使用主机IP和默认端口7777连接。首次运行因世界创建可能耗时较长。
bashtail -f ./terraria/logs/container_init.log
[!NOTE] 5. 首次启动注意事项(管理员设置):
首次启动时,查看容器日志(docker logs terraria)获取TShock生成的Setup Code,游戏内使用/setup命令需此代码。
可通过compose.yml或docker run的-e参数配置服务器行为:
| 变量名 | 描述 | 默认值 |
|---|---|---|
| LOG_INIT | 是否启用容器日志(保存至container_init.log) | false |
| SERVER_PASSWORD | 加入服务器所需密码 | false |
| MAX_SLOTS | 最大同时在线玩家数 | 8 |
| REST_API_ENABLED | 是否启用REST API | false |
| LOG_REST | 是否记录REST API连接日志 | false |
| DISABLE_UUID_LOGIN | 是否禁止用户用客户端UUID登录 | false |
| AUTO_SAVE | 是否启用Terraria内置自动保存 | true |
| SSC_ENABLED | 是否启用服务器端角色(SSC,客户端数据保存至服务器) | false |
| SSC_SAVE | SSC保存间隔(分钟) | 5 |
| PLAYER_APPEARANCE | SSC模式下是否保留玩家本地角色外观 | false |
| STARTINGINVENTORY | SSC启用时是否给新玩家初始物品(详见动态初始物品) | false |
| WORLD_NAME | 世界名称 | (空) |
| WORLD_FILE | 世界文件名 | terraria_world.wld |
| AUTO_CREATE | 自动创建世界大小(1=小,2=中,3=大) | 1 |
| DIFFICULTY | 世界难度(0=普通,1=专家,2=大师,3=旅途)仅对新世界有效 | 0 |
| WORLD_EVIL | 世界邪恶类型(random/corrupt/crimson) | random |
| SEED | 自动创建世界的种子 | random |
| FORCE_UPDATE | 是否阻止服务器无玩家时进入休眠 | false |
| MOTD | 每日消息 | (空) |
| SECURE | 是否启用游戏内置反垃圾功能 | false |
| LANG | 服务器语言(en-US/de-DE/it-IT/fr-FR/es-ES/ru-RU/zh-Hans/pt-BR/pl-PL) | en-US |
| TZ | 时区(参考[***] | UTC |
[!TIP]
点击查看完整compose.yml和.env示例
compose.yml:
ymlnetworks: terraria: external: false name: terraria services: terraria: image: finallf/terraria:latest container_name: terraria user: 1000:0 stdin_open: true tty: false environment: - LOG_INIT=true - SERVER_PASSWORD=123456 - MAX_SLOTS=16 - REST_API_ENABLED=true - LOG_REST=true - DISABLE_UUID_LOGIN=true - AUTO_SAVE=true - SSC_ENABLED=true - SSC_SAVE=1 - PLAYER_APPEARANCE=true - STARTINGINVENTORY=true - WORLD_NAME=ReloadeD服务器 - WORLD_FILE=my_world.wld - AUTO_CREATE=3 - DIFFICULTY=2 - WORLD_EVIL=crimson - SEED=fortheworthy - FORCE_UPDATE=true - MOTD=欢迎来到我的服务器! - SECURE=true - LANG=zh-Hans - TZ=Asia/Shanghai volumes: - ${SSD}/config:/tshock/config - ${SSD}/logs:/tshock/logs - ${SSD}/crashes:/tshock/crashes - ${SSD}/plugins:/tshock/plugins - ${SSD}/worlds:/tshock/worlds ports: - "7777:7777" - "7878:7878" networks: - terraria stop_grace_period: 30s restart: unless-stopped.env
SSD=/path/on/host/terraria
[!CAUTION] 请根据实际情况调整配置。
动态初始物品系统允许定义新玩家首次加入时的物品,无需手动编辑文件,启动时通过jq原子化处理。
🔹 选项1:基础套件
设置为true时,自动注入默认初始物品:99荧光棒、99铁皮药剂、1鞋扣、1冰镜、1掘墓铲。
ymlenvironment: - STARTINGINVENTORY=true
🔹 选项2:自定义套件
使用紧凑字符串格式定义物品:ID,PREFIX,QUANTITY(用冒号分隔)。
语法:netID,prefix,stack:netID,prefix,stack:...
示例:给新玩家1把铂金斧(ID:3482)、10火把(ID:8)、5小治疗药剂(ID:28):
ymlenvironment: - STARTINGINVENTORY=3482,0,1:8,0,10:28,0,5
🔹 选项3:移除物品
使用remove:ID移除指定物品:
示例:移除铂金斧(ID:3482):
ymlenvironment: - STARTINGINVENTORY=remove:3482
[!TIP] 物品ID可参考Terraria官方 wiki:Item IDs。
为确保服务器重启或镜像更新后数据不丢失,需映射以下5个核心卷:
/tshock/config
/tshock/logs(可选)
/tshock/crashes(可选- legacy)
/tshock/plugins(可选)
/tshock/worlds
[!TIP] 主机目录建议结构:
Plaintext/path/on/host/terraria/ ├── config/ ├── logs/ ├── crashes/ ├── plugins/ └── worlds/
本镜像采用无root(Rootless)标准,TShock服务器和内部脚本均不以root身份运行,防止游戏漏洞影响主机。需正确配置映射目录权限:
🔹 静态UID/GID说明
容器默认以UID 1000、GID 0运行。GID 0(root组)是推荐实践,允许主机目录无需严格匹配UID,只要组权限允许读写即可。
🔹 主机目录权限配置
compose.yml中设置用户为您主机的UID(替换1000):ymlservices: terraria: user: 1000:0
bashsudo chown -R 1000:1000 ./terraria
0读写权限:bashsudo chgrp -R 0 ./terraria sudo chmod -R g+rwX ./terraria
本镜像强调全可观测性,每一步初始化和命令均带时间戳记录:
📁 日志位置
映射卷保存日志:
ymlvolumes: - /path/to/host/logs:/tshock/logs
主要日志文件为container_init.log,包含启动脚本执行、命名管道创建、TShock控制台输出等。
🕒 高精度时间戳
每条日志前缀带时间戳:
[2026-04-05 14:30:05] [INFO] 初始物品注入成功。
📟 命名管道交互
不使用docker attach,通过命名管道发送命令(如kick、ban、save):
bashdocker exec -i [container_name] sh -c 'echo "say 欢迎来到Terraria世界!" > /tmp/terraria_input'
🛑 优雅 shutdown
执行docker stop时,容器捕获信号并自动保存世界,防止数据丢失。
若本项目对您有帮助,欢迎***更新与维护:
| 🌎 GitHub *** | *** | |
|---|---|---|
| 通过GitHub ***支持: https://github.com/***/finallf | 🇧🇷 扫描PIX***: | 点击或扫描***: |
🇧🇷 PIX密钥:25d1d528-df10-4005-bb28-2acf89706243
[!NOTE] 贡献步骤:
- Fork项目
- 创建新分支:
git checkout -b my-feature- 提交修改:
git commit -m "feature: 我的新功能"- 推送分支:
git push origin my-feature
感谢所有贡献者:
| https://github.com/Finallf |
<br> <br>
[!WARNING] 本项目采用https://github.com/finallf/terraria?tab=GPL-3.0-1-ov-file%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 finallf/terraria 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: