
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Docker容器化的Valheim服务器(支持BepInEx和ValheimPlus)
项目托管于https://github.com/lloesche/valheim-server-docker
Docker镜像名称为lloesche/valheim-server。
需将服务器配置目录挂载到Docker容器内的/config目录。
如果在Windows系统上已有存档世界,可从例如C:\Users\Lukas\AppData\LocalLow\IronGate\Valheim\worlds复制到$HOME/valheim-server/config/worlds,并将$HOME/valheim-server/config目录挂载到容器内的/config目录运行镜像。容器目录/opt/valheim包含已下载的服务器,可选择挂载此目录以避免每次启动时重新下载服务器。
bash$ mkdir -p $HOME/valheim-server/config/worlds $HOME/valheim-server/data # 复制现有世界 $ docker run -d \ --name valheim-server \ --cap-add=sys_nice \ --stop-timeout 120 \ -p 2456-2457:2456-2457/udp \ -v $HOME/valheim-server/config:/config \ -v $HOME/valheim-server/data:/opt/valheim \ -e SERVER_NAME="我的服务器" \ -e WORLD_NAME="Neotopia" \ -e SERVER_PASS="secret" \ lloesche/valheim-server
警告:SERVER_PASS必须至少5个字符,否则valheim_server.x86_64将无法启动!
首次启动需要几分钟时间,具体取决于互联网连接速度,因为容器会从Steam下载Valheim专用服务器(约1GB)。
不要忘记修改WORLD_NAME以匹配你的世界名称!对于现有世界,这是worlds/文件夹中不带.db/.fwl扩展名的文件名。
如果要通过互联网与朋友一起玩且处于NAT之后,请确保UDP端口2456-2457已转发到容器主机,并确保在任何防火墙中这些端口可公开访问。
更多信息请参见查找服务器部分。
仅局域网游戏请参见Steam服务器收藏夹与局域网游戏部分。
更多部署选项请参见部署部分。
向容器授予CAP_SYS_NICE权限是可选的,它允许Valheim使用的Steam库为自身分配更多CPU周期。没有此权限,启动日志中会显示Warning: failed to set thread priority消息。
所有变量名称和值均区分大小写!
| 名称 | 默认值 | 用途 |
|---|---|---|
SERVER_NAME | My Server | 服务器在服务器浏览器中显示的名称 |
SERVER_PORT | 2456 | 服务器监听的UDP起始端口 |
WORLD_NAME | Dedicated | 世界名称(不带.db/.fwl文件扩展名) |
SERVER_PASS | secret | 登录服务器的密码 - 至少5个字符! |
SERVER_PUBLIC | true | 服务器是否在服务器浏览器中列出(true是,false否) |
SERVER_ARGS | 额外的Valheim服务器命令行参数 | |
ADMINLIST_IDS | 管理员SteamID的空格分隔列表,会覆盖现有adminlist.txt条目! | |
BANNEDLIST_IDS | 被封禁SteamID的空格分隔列表,会覆盖现有bannedlist.txt条目! | |
PERMITTEDLIST_IDS | 白名单SteamID的空格分隔列表,会覆盖现有permittedlist.txt条目! | |
UPDATE_CRON | */15 * * * * | 更新检查的Cron计划(若设为空字符串或使用旧版UPDATE_INTERVAL则禁用) |
UPDATE_IF_IDLE | true | 仅当服务器空闲(无玩家连接)时才运行更新检查(true或false) |
RESTART_CRON | 0 5 * * * | 服务器重启的Cron计划(若设为空字符串则禁用) |
RESTART_IF_IDLE | true | 仅当服务器空闲时才运行每日重启(true或false) |
TZ | Etc/UTC | 容器时区(参考时区数据库列表) |
BACKUPS | true | 是否创建定期备份(true或false) |
BACKUPS_CRON | 0 * * * * | 世界备份的Cron计划(若设为空字符串或使用旧版BACKUPS_INTERVAL则禁用) |
BACKUPS_DIRECTORY | /config/backups | 备份目录路径 |
BACKUPS_MAX_AGE | 3 | 旧备份自动删除的天数 |
BACKUPS_MAX_COUNT | 0 | 保留的最大备份数,0表示无限制 |
BACKUPS_IF_IDLE | true | 即使长时间无玩家连接也进行备份 |
BACKUPS_IDLE_GRACE_PERIOD | 3600 | 当BACKUPS_IF_IDLE=false时,最后一个玩家断开连接后的宽限期(秒),在此期间仍会创建备份 |
PERMISSIONS_UMASK | 022 | 备份、配置文件和目录的Umask权限 |
STEAMCMD_ARGS | validate | 额外的steamcmd命令行参数 |
VALHEIM_PLUS | false | 是否加载https://github.com/valheimPlus/ValheimPlus模组(配置文件在`/config/valheimplus`,额外插件在`/config/valheimplus/plugins`),不能与`BEPINEX`同时使用。 |
BEPINEX | false | 是否加载BepInExPack Valheim模组(配置文件在/config/bepinex,插件在/config/bepinex/plugins),不能与VALHEIM_PLUS同时使用。 |
SUPERVISOR_HTTP | false | 启用supervisor的HTTP服务器 |
SUPERVISOR_HTTP_PORT | 9001 | 设置supervisor的HTTP服务器端口 |
SUPERVISOR_HTTP_USER | admin | supervisor HTTP服务器用户名 |
SUPERVISOR_HTTP_PASS | supervisor HTTP服务器密码 | |
STATUS_HTTP | false | 启用状态HTTP服务器,仅对公共服务器(SERVER_PUBLIC=true)有用 |
STATUS_HTTP_PORT | 80 | 状态HTTP服务器TCP端口 |
STATUS_HTTP_CONF | /config/httpd.conf | https://git.busybox.net/busybox/tree/networking/httpd.c文件路径 |
STATUS_HTTP_HTDOCS | /opt/valheim/htdocs | 状态httpd的htdocs路径,status.json在此生成 |
SYSLOG_REMOTE_HOST | 发送日志的远程syslog主机或IP | |
SYSLOG_REMOTE_PORT | 514 | 远程syslog UDP端口 |
SYSLOG_REMOTE_AND_LOCAL | true | 发送日志到远程syslog服务器时是否同时本地记录 |
PUID | 0 | 运行valheim-server的UID |
PGID | 0 | 运行valheim-server的GID |
有一些未文档化的环境变量,若配置错误可能导致问题,可在defaults中找到。
Valheim服务器默认日志包含大量噪音,这些环境变量允许用户移除不需要的日志行。
| 前缀 | 默认值 | 用途 |
|---|---|---|
VALHEIM_LOG_FILTER_EMPTY | true | 过滤空日志行 |
VALHEIM_LOG_FILTER_UTF8 | true | 过滤无效UTF-8字符 |
VALHEIM_LOG_FILTER_MATCH | | 过滤完全匹配的日志行 |
VALHEIM_LOG_FILTER_STARTSWITH | (Filename: | 过滤以指定字符串开头的日志行 |
VALHEIM_LOG_FILTER_ENDSWITH | 过滤以指定字符串结尾的日志行 | |
VALHEIM_LOG_FILTER_CONTAINS | 过滤包含指定字符串的日志行 | |
VALHEIM_LOG_FILTER_REGEXP | 过滤匹配正则表达式的日志行 |
默认过滤器移除以下内容:
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)行Assertion Failed警告日志行(参见https://github.com/lloesche/valheim-server-docker/discussions/104)Fallback handler could not load library开头的行如果存在与日志过滤器同名的ON_前缀环境变量,当日志过滤器匹配时,不会移除日志行,而是执行该变量内容,并将日志行通过标准输入传递给命令。
| 前缀 | 用途 |
|---|---|
ON_VALHEIM_LOG_FILTER_MATCH | 当日志行完全匹配时运行命令钩子 |
ON_VALHEIM_LOG_FILTER_STARTSWITH | 当日志行以指定字符串开头时运行命令钩子 |
ON_VALHEIM_LOG_FILTER_ENDSWITH | 当日志行以指定字符串结尾时运行命令钩子 |
ON_VALHEIM_LOG_FILTER_CONTAINS | 当日志行包含指定字符串时运行命令钩子 |
ON_VALHEIM_LOG_FILTER_REGEXP | 当日志行匹配正则表达式时运行命令钩子 |
除VALHEIM_LOG_FILTER_EMPTY和VALHEIM_LOG_FILTER_UTF8外,所有环境变量都是前缀,可定义多个匹配条件,例如:
-e VALHEIM_LOG_FILTER_STARTSWITH=foo \ -e VALHEIM_LOG_FILTER_STARTSWITH_BAR=bar \ -e VALHEIM_LOG_FILTER_STARTSWITH_SOMETHING_ELSE="some other filter" -e VALHEIM_LOG_FILTER_CONTAINS_Connected="Got character ZDOID from" -e ON_VALHEIM_LOG_FILTER_CONTAINS_Connected="cat >> /tmp/character_login"
***日志过滤器事件钩子示例
当玩家生成时发送***消息:
-e DISCORD_WEBHOOK="https://discord.com/api/webhooks/8171522530..." \ -e VALHEIM_LOG_FILTER_CONTAINS_Spawned="Got character ZDOID from" \ -e ON_VALHEIM_LOG_FILTER_CONTAINS_Spawned='{ read l; l=${l//*ZDOID from /}; l=${l// :*/}; msg="玩家 $l 进入世界"; curl -sfSL -X POST -H "Content-Type: application/json" -d "{\"username\":\"Valheim\",\"content\":\"$msg\"}" "$DISCORD_WEBHOOK"; }'
关于在环境变量和compose文件中的正确引用方式,参见下面的***通知。
如果运行ValheimPlus且此过滤器触发两次,请检查https://github.com/valheimPlus/ValheimPlus/issues/318,原因是`BepInEx.cfg`配置错误导致日志行重复。
以下环境变量可用于在特定事件发生时执行命令。
| 名称 | 默认值 | 用途 |
|---|---|---|
PRE_SUPERVISOR_HOOK | 在supervisord运行前执行的命令,启动会阻塞直到命令返回。 | |
PRE_BOOTSTRAP_HOOK | 在引导前执行的命令,启动会阻塞直到命令返回。 | |
POST_BOOTSTRAP_HOOK | 在引导后、服务器或任何服务启动前执行的命令,可用于安装额外软件包或执行系统设置,启动会阻塞直到命令返回。 | |
PRE_BACKUP_HOOK | 在创建备份前执行的命令,@BACKUP_FILE@会替换为备份ZIP文件的完整路径,备份会阻塞直到命令返回。 | |
POST_BACKUP_HOOK | 在创建备份后执行的命令,@BACKUP_FILE@会替换为备份ZIP文件的完整路径,备份会阻塞直到命令返回,详见将备份复制到其他位置。 | |
PRE_UPDATE_CHECK_HOOK | 在执行更新检查前执行的命令,当前更新会阻塞直到命令返回。 | |
POST_UPDATE_CHECK_HOOK | 在执行更新检查后执行的命令,后续更新会阻塞直到命令返回。 | |
PRE_START_HOOK | 在valheim-updater首次启动服务器前执行的命令,当前启动会阻塞直到命令返回。 | |
POST_START_HOOK | 在valheim-updater首次启动服务器后执行的命令,后续重启和更新检查会阻塞直到命令返回。 | |
PRE_RESTART_HOOK | 在valheim-updater执行服务器重启前执行的命令,当前重启会阻塞直到命令返回。 | |
PRE_SERVER_LISTENING_HOOK | 在服务器运行后、能够接受连接前执行的命令,检查连接状态的循环会阻塞直到命令返回。 | |
POST_SERVER_LISTENING_HOOK | 在服务器 |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务