折腾本腾
新手教程:如何在 unRAID 上正确安装 Docker | JackieWu
00 分钟
2024-1-16
2024-3-2
type
status
date
slug
summary
tags
category
icon
password
URL
notion image
unRAID 是一个近年来备受欢迎的 NAS 系统,其原生支持 Docker,因此在安装和管理 Docker 应用方面非常方便,这也是 unRAID 受欢迎的原因之一。
本文将为新手朋友介绍:
  1. 在 unRAID 中上哪安装 Docker 。
  1. 如何正确安装 Docker 。
  1. 如何纠正 Docker 的文件权限问题。
  1. 如何获取别人创建的 Docker XML 配置文件。

2、上哪安装 Docker

2.1、APPS(应用)

unRAID 提供了一个叫做 APPS(应用) 的应用市场功能,此功能的全称叫做 Community Applications(社区应用,简称为 CA),用户可以在里面搜索到相应的插件、Docker 等进行安装。
官方 Community Applications 介绍:
notion image
应用市场中所发布的各类 Docker 应用和插件都是经过官方审核发布的,其中既有官方自己发布的应用,也有第三方用户提交到 unRAID 官方后发布出来的应用。
notion image
CA 应用商店界面
比如说我需要安装 emby ,那么在应用市场搜索后会列出多个相关的 Docker 应用:
notion image
搜索 emby 之后会列出相关的 Docker 应用或者插件
为什么叫做 emby (或其他应用)的 Docker 有这么多个,我该怎么选则我需要的? 不止 emby,包括其他一些常见 Docker 比如 Jellyfin、Plex、qBittorrent … 等都会有多种不同的镜像,不同的镜像代表由不同的开发者发布和维护,比如下图种这两个 emby 的镜像分别是由 BinhexLinuxServer 发布:
什么是 Docker 镜像/容器?
Docker 镜像和容器是 Docker 技术中的两个重要概念,它们之间存在以下关系:
  1. 镜像是一个只读的模板:镜像是一个只读的文件系统,包含了运行应用程序所需的所有文件、依赖和配置信息。它可以看作是一个静态的、不可变的模板,用于创建容器。
  1. 容器是镜像的运行实例:容器是从镜像创建的、可运行的实例。可以将容器视为一个独立的、轻量级的虚拟环境,其中运行着应用程序和其依赖的进程。容器可以被启动、停止、删除和重新启动。
  1. 镜像是容器的基础:每个容器都是基于一个镜像创建的。镜像提供了容器运行所需的所有文件和配置,包括操作系统、应用程序、库文件等。容器在启动时会加载镜像,并在其基础上创建一个可写的容器层,用于保存容器运行时的变化和数据。
  1. 镜像可以被共享和复用:镜像是可复制和共享的,可以通过Docker Hub等镜像仓库进行分发和获取。多个容器可以共享同一个镜像作为基础,从而实现快速部署和扩展应用程序的能力。
总结来说,镜像是创建容器的模板,而容器是基于镜像运行的实例。通过使用镜像和容器,Docker提供了一种轻量级、可移植和可扩展的容器化解决方案。
notion image
notion image
虽然是不同的开发者发布的镜像,但在大多数的功能基本都是一样的,而且很可能你都察觉不到两者有什么区别,因为不同的发布者可能只是在一些系统代码层面做了一些优化或者改动,在用户的使用层面是区分不出来区别的,所以一般情况下任意选择其中一个即可。
notion image
notion image
notion image
notion image
notion image
notion image
notion image
Docker 安装参数配置界面(模板界面)
在上图中可以看到,在 CA 应用商店安装的 Docker 都会给你配置好相应的参数,这些参数依据 unRAID 系统特性来针对性做了适配,这种做了针对性适配之后所给到用户使用的 Docker 配置模板叫做 CA 模板(CA templates)
CA 模板实际上是一个 XML 文件(以 .xml 结尾),该文件存储了 Docker 应用或者插件的一系列安装参数。
就比如在上文中看到的 emby 应用,其 XML 文件的内容是这样的:
notion image
notion image
XML 文件内容
unRAID 上的 Docker XML 模板文件是存储在 /boot/config/plugins/dockerMan/templates-user 路径下(即存储在 U 盘的 config 文件夹内),所以就算你误删了一个 Docker 容器,你仍可以借助 XML 模板重新安装 Docker 而不需要再重新配置参数,这个特性极大的方便了用户使用 Docker。
有些朋友以为删除掉 Docker 容器后会导致原有的应用运行配置文件丢失,实际上并不会,配置文件会保留在系统存储中,不会因容器的删除而丢失。
notion image
XML 模板保存目录内容
当你从 CA 应用商店或者手动安装 Docker 后就会自动创建一个 XML 文件,所以当你删除了 Docker 之后可以重新借助 XML 模板再创建 Docker 容器。
notion image
“模板”列表的每一项都代表你已经安装过的并且存储在 unRAID 上的 Docker XML 模板
明白了这一点后,实际上用户可以创建和修改属于自己的 XML 模板,从而灵活安装各种 Docker,甚至你还可以发布到 unRAID 的 CA 应用市场中,比如 Youtube 上的这个视频介绍了如何在 unRAID 应用市场发布 Docker XML 模板的步骤过程:
借助这一特点,你可以下载别人创建好的 XML 到 unRAID 上,从而可以直接安装别人已经配置好的 Docker 应用参数(本文末尾作者提供了自己的 Gitee 仓库供大家使用)。这种场景的作用主要体现在,当你在 CA 应用市场找不到对应的 Docker 应用时可以下载别人配置好的 XML 模板从而方便的进行安装。
这个特点也使得 unRAID 在 Docker 应用的用户体验上要比其他 NAS 系统来的更友好。
但并不是所有的 Docker 应用都有对应的 CA 模板,因此这种时候就需要用户自己来手动配置模板并创建 Docker 。

2.2、手动安装

虽然说 CA 应用商店已经提供了很多的 Docker 可选择,但很有可能你在寻找某些 Docker 的时候会发现应用市场搜不出来你需要的应用,比如说 Lskypro 这个图床应用在 CA 应用商店中并没有对应的模板:
notion image
表明 Lskypro 没有被官方或者第三方开发者发布到 CA 应用商店
此时你可以点击右侧的“单击此处以从 DockerHub 获取更多结果”来展示 Docker Hub 所搜索到的内容:
什么是 Docker Hub
Docker Hub 是一个公共的 Docker 镜像注册表和容器仓库服务。它是由 Docker 官方提供的云服务,用于存储、分享和获取 Docker 镜像。
以下是 Docker Hub 的一些主要功能和特点:
  1. 镜像存储和分享:Docker Hub 允许用户上传、存储和分享 Docker 镜像。你可以将自己创建的镜像推送到 Docker Hub 上,供其他用户使用和下载。
  1. 官方镜像:Docker Hub 提供了许多官方的 Docker 镜像,包括常用的操作系统、数据库、 Web 服务器等。你可以从 Docker Hub 上直接获取这些官方镜像,加快应用程序的开发和部署。
  1. 自动构建:Docker Hub 支持自动构建功能,可以与代码托管平台(如 GitHub、Bitbucket )集成,当代码库中的代码发生变更时,Docker Hub 可以自动构建、测试和推送新的镜像。
  1. 组织和团队:Docker Hub 允许用户创建组织和团队,方便多人协作和权限管理。你可以邀请其他用户加入你的团队,并共享和管理镜像。
  1. 云端部署:Docker Hub提供了与多个云服务提供商(如 AWS、Azure、Google Cloud )的集成,方便在云上部署和管理容器。
通过Docker Hub,你可以方便地访问和获取各种 Docker 镜像,加速应用程序的开发和部署过程。同时,你也可以将自己的镜像上传到 Docker Hub ,并与其他人共享和协作。
notion image
notion image
notion image
notion image
当你点击“安装”按钮之后,unRAID 会先拉取 Docker 镜像,然后会尝试自动给你添加相应的参数:
notion image
notion image
notion image
拉取镜像
notion image
由 unRAID 自动为你创建的 XML 模板
但实际上可以看到自动生成的 XML 模板没有针对性的配置,并且还缺少一些必要的参数。这里作者将给大家介绍如何从零开始手动的去在 unRAID 上创建 Docker 应用并配置好参数。
这里作者就以 Lskypro 这个应用为例,介绍具体的操作过程。

(1)确认所需要参数

首先,需要确定安装 Docker 应用需要提供哪些参数(变量、路径映射、端口和镜像地址等)
由于 Lskypro 原项目中没有 Docker 版本,因此我们可以从 cold-pig/LskyPro-Docker 项目所构建的 Docker 镜像去使用 Lskypro 。
在项目的说明中,我们可以找到安装 Docker 应用所需要的参数:
notion image
notion image

(2)添加容器并配置参数

从项目的说明文档中,我们了解到需要给 Docker 添加以下参数:
  • 镜像仓库地址:coldpig/lskypro-docker
  • 端口映射:映射容器内的 80 端口到 unRAID 上
  • 映射路径:将容器的 /var/www/html 映射到 unRAID 上
具体操作如下:
notion image
notion image
填写 存储库 地址:
notion image
notion image
添加端口映射:
notion image
notion image
添加路径映射:
填写好上述的配置之后,已经可以满足安装 Lskypro docker 应用的要求了,不过我们还可以再添加以下两个参数来更方便的让我们使用:
  • 图标链接:即 unRAID 展示 Docker 应用的图标,所填写的参数其实就是图标的 URL 地址,你可以在这里填写上你喜欢的图标链接。
  • WebUI:配置了 WebUI 参数之后,点击容器图标会多出一行“打开(WebUI)”的选项,点击即可直接跳转到容器的管理界面。WebUI 的参数格式为:
    最终的效果如下:
    点击“应用”之后即会开始下载 Docker 镜像并创建容器:
    检查 Docker 应用能否正常运行:
    能够进入 WebUI 界面表示容器正确安装和启动了,但并不是所有 Docker 应用都会有网页界面,需要根据实际情况来验证最终的安装、运行情况。
    如果你对图床应用感兴趣,希望给自己的写作环境搭建一个图床,那么推荐阅读作者之前的《

    3、如何纠正 Docker 的文件权限问题

    3.1、安装时提供正确的变量名和变量值

    我们在安装 Docker 的时候,往往需要添加关于用户和用户组的变量,以此来给到 Docker 应用相应的权限,比如说在上文提到的 emby 应用:
    图片中的三个参数是关于权限的变量:
    • PUID :指赋予 Docker 容器的用户权限,在 unRAID 上一般给到数值 99 即可;
    • PGID :指赋予 Docker 容器的用户组权限,在 unRAID 上一般给到数值 100 即可;
    • UMASK:UMASK(User Mask)是一种掩码,用于定义新创建的文件和目录的默认权限。它决定了在创建新文件和目录时所使用的默认权限掩码,一般设置为 022 即可(请注意,umask不会影响已经存在的文件和目录的权限。它仅适用于新创建的文件和目录)。
    在 unRAID 上要赋予 Docker 应用权限时,大多数情况下,我们一般只需要给到 99100 即可。这是因为在 unRAID 上,文件的基础读写权限赋予给了 nobody 用户和 users 用户组,而 nobodyusers 所对应的用户和用户组编号分别为 99100
    unRAID 内一般文件的所有者都是 nobody
    💡
    这也就是为什么当你从 CA 应用商店安装 Docker 时,大多数涉及到用户和用户组权限的变量(PIDPUIDGIDGUID 等变量)值都为 99100
    但这并不是绝对的,有时候某些 Docker 应用会要求提供特定的用户和用户组,否则可能会导致 Docker 不能正确使用。
    比如说作者之前安装的一个叫做 qmcgaw/ddns-updater的 DDNS 应用,其要求提供到容器的用户和用户组权限须为 1000
    根据其说明,如果你不希望使用 1000 的用户权限,那就得自己另外编译 Docker 镜像并指定其他的用户和用户组 ID。
    因此在创建此 Docker 的时候,用户和用户组的变量 UID GID 值就需要设置为 1000
    需要说明的是,在提供给 Docker 容器用户和用户组的变量时,变量名可能会不一样,比如说有些容器需要提供 PUID PGID 这样的变量名,而有些容器则可能要求提供的是 UID GID 这样的变量名,需要读者们根据对应的文档添加正确的变量,否则可能 Docker 应用可能会因为权限不对导致运行时出现问题:
    使用 UID 和 GID 作为权限变量名
    使用 PUID 和 PGID 作为权限变量名

    3.2、纠正文件的权限的方法和步骤

    如果在某些情况下,现有文件的权限不正确,而导致 Docker 没有权限读取时,Docker 应用就会无法正确运行,那么此时你就需要先纠正这些文件的权限。

    (1)纠正除 appdata 文件夹之外的文件权限

    在 unRAID 上,有一个叫做 Fix Common Problem 的插件:
    如果你无法通过 CA 应用下载此插件,可以通过这里的方法安装插件。
    复制以下命令到命令行窗口运行:
    config → plugins
    当你安装此插件后,在 “工具”界面会出现一个叫做 Docker Safe New Perms 的工具:
    这个工具的作用是恢复所有共享和文件的标准 unRaid 权限:此工具会启动一个后台进程,去访问每个阵列里的硬盘和缓存盘,将除了 appdata 以外的文件和目录所有权更改为 nobody/users(即 uid/gid 设置为 99/100)。
    使用方法如下:
    确认框打上勾,然后点击 START 按钮开始执行进程
    进程去纠正每一个盘内的文件权限

    (2)纠正 appdata 文件夹内的文件权限

    但上面的这个工具是不会去纠正 appdata 这个文件夹内的文件权限的,那是因为由于不同的 Docker 应用可能会使用不同的用户/用户组权限,也就是说并不是所有的 Docker 应用都会使用 99/100 这样的权限,所以如果你强制让此工具去纠正 appdata 内的所有文件权限都为 99/100 ,那就有可能会造成 Docker 应用无法运行
    💡
    appdata 这个共享文件夹是系统默认创建的、给到 Docker 应用存储容器配置文件的默认文件夹,你会看到很多 CA 应用商店内的应用都会将容器的配置文件映射到此目录上以此来保存容器的运行配置文件,但你可以指定其他的文件夹来作为默认文件夹,例如下图(虽然可以这么做,但根据作者自身的经验,保持默认会比较好一点):
    那么根据这种情况,我们就得手动的根据实际需要去纠正 appdata 文件夹内的文件权限,我们可以借助“共享”下的文件操作来进行更改。
    借助 UI 界面对文件进行编辑,需要安装 Dynamix File Manager 插件。
    如果你无法在 CA 应用商店下载,你可以借助以下方法进行安装:
    1. 分别复制以下命令到命令行窗口执行:
      1. 手动安装插件:
        1. config → plugins
          找到 dynamix.file.manager.plg 后点击安装
      如果你用的是 6.12 版本,点击文件夹左侧的箭头按钮进入文件列表:
      如果你用的是
      勾选需要更改权限的文件夹并点击“所有者”更改所有者权限:
      然后更改对应的读写权限,建议“所有者”“组”的权限设置为“读/写”“其他”设置为“只读”
      以上就是修改文件夹权限的方法,如果你了解 Linux 的命令行操作,那么其实你用命令行会更快一点,例如:
      递归修改 /mnt/user/appdata/zerotier 文件夹和其内文件的所有者和所属组为 99/100

      4、如何获取别人创建的 Docker XML 配置文件

      可以看到,有时 CA 应用商店里找不到对应的 Docker 应用时,手动去配置 Docker 参数来创建 Docker 容器会有一点小麻烦,前面我提到可以通过下载别人的 XML 文件到 unRAID 上来直接安装 Docker,那么这里作者就提供作者自己的 Gitee 仓库来方便大家去使用。
      目前仓库保存的 XML 模板不多,后续会慢慢添加,大家也可以提需求,我会整理好后上传到仓库。
      下载模板的方法:
      1. 找到想要安装的 Docker XML 模板并点击文件名,如 Alist:
      1. 右键“原始数据”复制地址链接:
      1. 把刚才复制的链接填写到下面的命令中,然后粘贴到 unRAID 的命令行窗口运行:
        1. 将 xxxx 替换为刚才复制的 URL 链接
      1. 添加容器并使用模板创建 Docker :
        1. 选择下载的 XML 模板

          5、2023-07-25 案例补充:思源笔记

          (1)Docker 镜像名称是什么?
          “存储库”
          后缀
          (2)需要映射哪些文件夹路径?
          “工作空间文件夹”
          • 需要通过 -workspace 指定工作空间文件夹的路径。
          • (建议)将 workspace 文件夹路径在宿主机和容器上配置为一致的。
        2. -workspace
        3. 启动参数(Startup Parameters)
          容器配置参数(Container Configuration Parameters)
          这一类参数是可以由开发者自定义的,就比如这里的
        4. -workspace
        5. 参数。
          发布参数
          (3)需要什么样的权限?
          镜像中是使用默认创建的普通用户
          网页界面修改作用有限,比如不能通过编号来指定用户或用户组
          chown 命令将 siyuan 文件夹的所属用户和所属用户组都设置为 1000
          “额外参数”
          用户参数(User Parameters)
          用户身份参数(User Identity Parameters)
          (4)需要映射哪些端口?
          “容器端口”
          “主机端口”
          (5)最终的 CA 模板参考
          • WebUI:
            • 图标链接:
          • Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
          Relate Posts
          Comments
          昵称
          邮箱
          网址
          <div _="@=4355,dis=none"><div pseudo="-webkit-input-placeholder" id="placeholder" style="display: block !important;" _="@=4356,dis=none,[@=4357]">评论时填上邮箱可以接收博主的回复信息</div><div _="@=4358,dis=none"></div></div>0/500
          4 条评论
          坏人死于话多 2023-11-16
          6
          unraid6.12.4,使用大佬alist模板,映射本地/mnt/user到/mnt/data,阵列文件夹正常打开,缓存和池的文件夹显示成一个文件形式无法打开。请问大佬有同样情况吗?现在暂时改成磁盘共享,直接映射磁盘了
          Windows 10
          Microsoft Edge 119.0.0.0
          JackieWu 博主 2023-11-22
          额,alist 不需要映射路径进去,我去改改我的模板。
          Windows 10
          Chrome 119.0.0.0
          坏人死于话多 2023-11-25
          回复 @JackieWu :
          新模版是把本机存储通过SMB添加是吗
          Windows 10
          Microsoft Edge 119.0.0.0
          JackieWu 博主 2023-11-25
          Alist 跟本地存储没关系,安装的时候不需要映射本地存储进去。
          Windows 10
          Chrome 119.0.0.0
          坏人死于话多 2023-11-27
          回复 @JackieWu :
          因为想找个方便管理本地存储的docker容器,所以一直是映射/mnt/user进alist的,那不映射本地存储进去就只能通过添加SMB来管理了吗
          Windows 10
          Microsoft Edge 119.0.0.0
          JackieWu 博主 2023-11-29
          我理解你的意思了,你希望是将本地存储放到 alist 里面去管理。但是我没怎么使用过这种方式,不晓得“缓存和池的文件夹显示成一个文件形式无法打开”这个问题该如何解决。
          Windows 10
          Chrome 119.0.0.0
          坏人死于话多 2023-12-01
          回复 @JackieWu :
          感谢,可能是因为6.12的独立共享,软链接导致的,可以通过映射/mnt作为本地存储即可解决
          Android 10
          Microsoft Edge 119.0.0.0
          展开
          炒土豆丝 2023-10-21
          1
          在 6.1.2上我遇到了 nobody 权限的文件通过 SMB 访问会没有写入权限,害我把很多docker的 PID 都改成了 1000 ,现在修好了不知道要不要改回去。
          macOS Catalina
          Safari 17.1
          JackieWu 博主 2023-11-22
          回复 @炒土豆丝 :
          “遇到了 nobody 权限的文件通过 SMB 访问会没有写入权限” 是因为组权限不够,你可以使用文章里面提到的 Docker Safe New Perms 工具去解决。Docker PID/GID 之类的问题你可以使用 linux 命令去解决(chown、chmod等),命令使用方法可以百度/google。
          Windows 10
          Chrome 119.0.0.0
          你吃饭没 2023-09-18
          1 1
          大佬,我点击“单击此处从DockerHub获取更多结果无法打开”这个按钮界面无法打开是为什么,我试了网关设置成能魔法的旁路由了还是不行,会转很久,然后显示No Matching Applications Found On Docker Hub
          macOS Catalina
          Chrome 117.0.0.0
          JackieWu 博主 2023-09-18
          回复 @你吃饭没 :
          最好检查下旁路由的 DNS 之类的设置,估计是网络方面的问题。
          Windows 10
          Chrome 117.0.0.0
          培森 2023-09-08
          1
          请问一下Fix Common Problem 这个插件是不是已经和 6.1.4 中自带的 工具-新权限 重复了
          我看了下新权限好像提供的也是一样的功能

          评论
          Loading...