在 Docker 中以非 root 用户身份运行 Seafile

Seafile 14.0 和 13.0 均支持在 Docker 容器内以非 root 用户身份运行 Seafile 服务。
启用该模式后,容器内会自动创建 seafile 用户,其用户 ID(UID)和组 ID(GID)均为 8000 。无需在宿主机上手动创建同名用户。
以下操作以 Seafile Docker Compose 默认部署目录为例:
  • Docker Compose 配置文件目录: /opt/seafile
  • Seafile 持久化数据目录: /opt/seafile-data
如果使用了自定义部署目录或数据卷路径,请相应调整命令。
启用非 root 运行模式
1. 停止并移除当前容器
确保已经按照 Docker 部署文档完成 Seafile 安装,然后在 Docker Compose 配置文件所在目录执行:
            
                
                
cd /opt/seafile
docker compose down
此命令会停止并移除 Compose 管理的容器,但不会删除上述宿主机持久化目录中的数据。 不要在操作过程中删除数据目录。
2. 修改 .env 文件
打开 /opt/seafile/.env ,设置以下环境变量:
            
                
                
NON_ROOT=true
如果该变量已存在,请将其值改为 true ,不要重复添加。
3. 修改数据目录权限
确保容器内的 seafile 用户可以读写持久化数据目录。按官方提供的方法,在宿主机执行:
            
                
                
sudo chmod -R a+rwx /opt/seafile-data/
安全提示: 此命令会递归允许所有本地用户读、写和进入该目录,权限范围较宽。请在执行前评估宿主机的安全要求,尤其是多人共用的服务器。若使用更严格的访问权限配置,需要确保 UID/GID 为 8000 的 Seafile 进程仍能访问所需文件和目录。
4. 启动 Seafile
返回 Compose 配置目录并启动服务:
            
                
                
cd /opt/seafile
docker compose up -d
可以执行以下命令查看容器状态和启动日志:
            
                
                
docker compose ps
docker compose logs --tail=100 seafile
如果需要确认容器中的 seafile 用户及其 UID、GID,可执行:
            
                
                
docker exec seafile id seafile
正常情况下,该用户的 UID 和 GID 均为 8000 。
以 seafile 用户执行维护脚本
开启非 root 模式后,执行 Seafile 维护脚本时,也应使用容器内的 seafile 用户。
例如,要运行垃圾回收脚本,可以先进入容器并切换至脚本所在目录:
            
                
                
docker exec -it seafile bash
cd /opt/seafile/seafile-server-latest
首次检查时可先执行不删除数据的预览命令:
            
                
                
su -p seafile -c './seaf-gc.sh --dry-run'
确认结果后,再根据 垃圾回收 文档执行实际清理。
注意: NON_ROOT=true 用于以非 root 用户运行 Seafile 服务,不等同于使 Docker 守护进程或容器中的所有辅助进程都以非 root 身份运行。