管理和自定义容器
:::caution[Disclaimer]
本页旨在帮助各个技能水平的用户充分利用在 Unraid OS 上的 Docker 容器。这些提示和最佳实践来自 Unraid 团队,确保符合大多数用户的需求。然而,请记住,Docker 在不断发展,因此对于最新功能、高级配置或超出 Unraid 覆盖范围的问题排查,通常建议查阅官方 Docker 文档。
:::
在 Unraid 中自定义 Docker 容器之前,了解基本的配置选项是很有帮助的。每个容器模板提供了一个用户友好的界面,用于设置网络、存储和环境变量,让您无需使用复杂的命令行工具即可定制容器的行为,以满足您的需求。
- 网络类型
- 卷映射
- 端口映射
- 环境变量
Unraid 支持多种 Docker 网络模式。您选择的网络类型决定了容器与其他设备和容器的通信方式:
-
桥接 (默认): 容器位于一个内部的 Docker 网络中。只有您明确映射的端口才能从 Unraid 服务器或局域网访问。这是大多数应用程序最安全且最常用的选项。
-
主机: 容器共享 Unraid 服务器的网络堆栈。它可以使用任何可用的端口,但必须确保端口不会与其他服务冲突。只有在应用程序需要直接网络访问时才使用此模式。
-
无: 容器没有网络访问权限。可用于不需要任何网络连接的隔离工作负载。
-
自定义(macvlan/ipvlan): 容器在局域网上分配自己的 IP 地址,使其显示为一个独立的设备。这适用于高级场景,但可能需要在网络环境中进行额外配置。
容器模板中指定的默认网络类型推荐给大多数用户。
Docker 有一个限制,阻止它参与共享同一子网的两个网络。如果您在有线和无线连接之间切换,则需要重新启动 Docker 并重新配置所有现有容器以使用新接口。此网络配置更改需要容器重新配置。
卷映射控制您的容器如何访问 Unraid 服务器上的文件。每个映射将容器内的一个文件夹(容器路径)链接到 Unraid 服务器上的一个文件夹(主机路径)。
- 容器路径: 容器内部的目录(例如,
/config
或/unraid_media
)。 - 主机路径: 您 Unraid 服务器上的目录(例如,
/mnt/user/appdata/myapp
)。 - 访问模式: 控制权限 - 只读或读/写。使用仍能使容器正常工作的最严格模式。
Store application data (settings, libraries, etc.) outside the container, typically in the appdata
user share. This share management approach keeps your data safe during updates or reinstalls.
- 路径区分大小写。
- 容器路径应以
/
开头。 - 如果使用未分配的设备作为主机路径,请将访问模式设置为“Slave”选项以确保正确检测。
- 如果主机路径在容器启动时不存在,则会自动创建。
- 服务器上出现的意外文件夹可能表明映射配置错误。
端口映射决定了网络流量如何从 Unraid 服务器路由到容器。
-
桥接网络: 您可以将内部容器端口映射到不同的主机端口。例如,如果三个容器内部使用端口8000,您可以将它们分别映射到主机上的8000、8001和8002。
-
主机网络: 容器可以使用任何可用端口。避免在多个容器中使用相同的端口以防止冲突。
仅修改主机端口值。除非您知道应用程序支持更改,否则不要改变容器端口。
大多数模板提供合理的默认值,但您可以添加或调整端口映射。
环境变量可以定制您 Docker 容器在运行时的行为。它们允许您传递键值对,您的容器化应用程序可以读取并利用这些信息。
环境变量的常见用途
- 设置时区
- 配置用户和组ID
- 指定语言偏好
- 调整应用程序特定设置,例如 API 密钥或功能切换
在 WebGUI 中管理环境变量
- 您可以在容器的配置屏幕通过 WebGUI 添加、编辑或删除环境变量。
- 许多容器模板已经预设了一些常用环境变量,但如果需要,您可以随时添加更多。
- 务必检查特定应用程序的文档以了解可用的环境变量及其有效值。
TZ=America/New_York
: 这会设置容器的时区。PUID=99
和PGID=100
: 这些设置文件权限的用户和组 ID。UMASK=022
: 这控制新创建文件的默认文件权限。API_KEY=your_api_key_here
: 这可以用于应用程序进行外部服务的身份验证。
使用环境变量,以避免在容器镜像中硬编码敏感或环境特定的信息。此做法增强了容器的可移植性和安全性。
创建和启动容器
一旦配置了容器的网络、卷映射、端口映射和环境变量,您就可以创建并启动 Docker 容器了。本节将指导您完成创建过程,解释如何管理启动顺序和依赖关系,并提供先进的启动定制化技巧。
创建一个容器
查看容器模板中的配置设置后:
- 单击 创建 开始下载并设置容器。
- 在过程完成前请避免关闭浏览器窗口或导航到其他页面。
- 新存储库的首次下载可能比后续下载耗时更长。
- 完成后,单击 完成 返回 Docker 页面,您可以管理或添加更多容器。
规划启动顺序
某些容器依赖于其他容器才能正确运行。例如,一个应用程序可能需要首先运行一个数据库容器,或某个服务可能需要在启动之前激活一个VPN 容器。
- 识别提供核心服务的容器(如数据库、VPNs 或存储网关)。
- 确保依赖容器仅在其前提条件启动并准备好后才启动。
- 查看每个容器的文档以了解特定的启动要求。
高级容器启动
Unraid 为您提供灵活的控制,允许您选择哪些容器自动启动及启动的顺序。这对于有依赖于其他容器的情况尤其有用(例如一个数据库或 VPN 服务)。
确保在 array 启动时自动启动容器:
- 在 WebGUI 的 Docker 选项卡上,
- 切换 自动启动 开关到 开 为每个您希望自动启动的容器。
自定义启动顺序和延迟
默认情况下,Unraid 会尽可能快地按 Docker 选项卡上的顺序启动所有自动启动容器。您可以自定义此顺序并在容器启动之间添加等待时间:
- 在 Docker 选项卡上,使用挂锁图标解锁容器列表。
- 通过拖放容器来重新排列其顺序。
- 使用顶部右侧的切换按钮切换到 高级视图。
- 在 AutoStart 列中,为任何需要额外时间的容器在 wait 字段输入等待时间(以秒为单位),以便下一个容器启动。
- 使用试错为您的设置确定最佳的等待时间。
设置正确的顺序和等待时间对于依赖其他服务的容器尤其重要(例如,在启动使用它的应用之前启动数据库,或在依赖应用之前启动 VPN)。
测试启动顺序
虽然 Unraid 没有专门的“测试启动序列”功能,但您可以模拟并验证您的启动顺序:
- 在 Docker 选项卡上停止所有容器。
- 以您计划的顺序手动启动每个容器,使用 启动 按钮。
- 监测容器日志和应用程序行为以确保满足依赖性并按预期初始化服务。
- 根据需要调整启动顺序或等待时间。
在更改容器依赖关系或添加新服务后测试启动顺序,尤其是在设置依赖于特定启动时序时。
控制您的容器
一旦您创建并启动了 Docker 容器,通过 WebGUI 管理它非常简单。本指南将指导您使用上下文菜单,了解容器健康指示器,并在容器内访问卷映射。
要访问容器的上下文菜单,请转到 Docker 或 仪表板选项卡,然后单击要管理的容器图标。此菜单提供快速访问常见操作的方法:
选项 | 描述 |
---|---|
WebUI | 在新的浏览器选项卡中打开容器的网页界面(如有)。 |
控制台 | 打开一个命令行界面以直接与容器交互。 |
停止 | 停止正在运行的容器。 |
暂停 | 暂停容器,临时停止所有进程。 |
重启 | 重启容器,应用任何配置更改。 |
日志 | 显示容器的日志输出以进行故障排查。 |
编辑 | 更改容器设置,如端口或卷映射。更改在保存后立即生效。 |
移除 | 删除容器。您可以选择仅删除容器或同时删除其镜像。 |
项目页面 | 打开容器的项目页面以获取文档和支持。 |
支持 | 提供对容器支持资源和的帮助访问。 |
更多信息 | 显示关于容器及其配置的更多信息。 |
健康指示器
您将在每个容器的图标旁找到一个彩色健康指示器:
- 🟢 健康: 表示容器正在运行并按预期响应。
- 🟡 不健康:容器正在运行但未通过健康检查。检查日志或容器设置以获取更多信息。
- ⚪ 无健康检查:这意味着没有为容器配置健康检查。对于许多应用程序来说,这很常见,并不一定是个问题。
健康检查由容器作者定义,可能不适用于所有镜像。
容器内的卷映射
通过 Web 界面配置应用程序时,引用在配置期间设置的容器路径 -
例如,如果您将主机上的 /mnt/user/media
映射到容器中的 /unraid_media
,您应该在应用程序的设置中使用 /unraid_media
。
示例场景
以下是一些展示常见路径映射配置的示例,是用户在设置 Docker 容器时经常需要的。它们展示了如何在 Unraid 的主机文件系统路径与容器的内部路径之间进行转换,帮助您正确配置应用程序。
-
媒体服务器: 主机路径:
/mnt/user/media
容器路径:/unraid_media
在应用程序中,将您的媒体库位置设置为
/unraid_media
。 -
Appdata 存储: 主机路径:
/mnt/user/appdata/myapp
容器路径:/config
在应用程序中,使用
/config
作为配置存储。 -
Multiple user shares: Host path:
/mnt/user/media
→ Container path:/media
Host path:/mnt/user/data
→ Container path:/data
在应用程序中根据需要参考
/media
或/data
。
始终使用允许容器正常工作的最严格访问模式(只读或读/写)。
调度启动和停止
Unraid 不原生支持 Docker 容器的计划启动或停止操作,但您可以使用用户脚本插件轻松自动化此过程。这个强大的工具允许您按计划运行自定义脚本,从而实现对容器的自动控制。
用户脚本插件
用户脚本插件允许您直 接从 WebGUI 创建、管理、和安排自定义 shell 脚本。您可以将其用于各种自动化任务,如启动或停止容器、备份数据或运行维护例程。
- 如果尚未安装插件,请从应用选项卡安装。
- 通过 设置 → 用户脚本 访问它来创建和管理您的脚本。
要了解更多关于插件的信息,请查看插件。
计划容器操作
要按计划自动启动或停止您的容器:
- 从 应用程序 标签安装 用户脚本插件。
- 导航至 设置→用户脚本。
- 为每个独特的计划创建一个新脚本。如果多个容器共享相同的计划,您可以在单个脚本中包含它们的命令。
- 使用下拉菜单设置计划,或使用自定义
cron
表达式以获取更高级的定时选项。 - 点击 应用 保存并激活您的脚本。
Cron 表达式使得计划安排更加灵活,超越内置选项。例如,0 3 * * 1
会在每周一凌晨 3:00 运行您的脚本。
命令示例
- 启动容器
- 停止容器
- 重启容器
- 检测容器状态
- 查看容器日志
要启动一个容器,使用命令:
docker start "container-name"
将 "container-name"
替换为在 Docker 标签中显示的实际名称。
要停止一个容器,使用命令:
docker stop "container-name"
将 "container-name"
替换为在 Docker 标签中显示的实际名称。
要重启一个容器(在更新配置或进行故障排除后很有用):
docker restart "container-name"
将 "container-name"
替换为在 Docker 标签中显示的实际名称。
要检查容器是否正在运行:
docker ps --filter "name=container-name"
如果容器正在运行,这将列出该 容器。
要查看容器的日志(对故障排除很有帮助):
docker logs "container-name"
这将显示指定容器的最近日志输出。
您可以在 Docker 标签中或通过查看容器的配置屏幕中的 docker run
命令找到容器名称。