mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2026-04-25 08:45:58 +03:00
[GH-ISSUE #1419] docker部署版本在手动备份后的恢复功能会误删其他nginx容器的配置文件并且报错device or resource busy #5219
Labels
No labels
Q/A
bug
casdoor
dependencies
docker
documentation
duplicate
enhancement
help wanted
invalid
lego
platform:openwrt
platform:windows
pull-request
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/nginx-ui#5219
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @sevenand888 on GitHub (Nov 3, 2025).
Original GitHub issue: https://github.com/0xJacky/nginx-ui/issues/1419
Issue报告:Nginx UI备份/恢复功能在Docker环境下存在设计缺陷
Issue标题
[Bug] Backup/Restore功能在Docker环境中失败:设备繁忙错误 (device or resource busy)
问题描述
在使用Docker部署的Nginx UI中,备份功能可以正常工作,但恢复功能总是失败。错误信息显示Nginx UI试图清理Docker挂载的目录,导致"device or resource busy"错误。
环境信息
复现步骤
错误日志
问题分析
根本原因
恢复功能的清理逻辑存在设计缺陷:
/etc/nginx目录,没有考虑Docker卷挂载的特殊性具体问题
backup/restore.go中的清理函数试图删除/etc/nginx下的所有内容ngx_v1,ngx_v2,ngx_v3),无法直接删除期望行为
完整恢复流程:清理应该成功完成,然后正常恢复备份内容到所有目录(包括挂载目录)
正确处理挂载点:对于Docker挂载的目录,应该能够正常清理和恢复,而不是跳过或报错
数据一致性:恢复后,所有配置文件(包括挂载目录中的)都应该与备份内容保持一致
建议的修复方案
方案1:改进清理逻辑,正确处理挂载点
方案2:使用rsync式恢复,避免完全清理
方案3:分阶段恢复,更好的错误处理
附加信息
核心问题:恢复功能应该在清理挂载目录时清空内容而不是删除目录本身
数据安全:恢复失败时不应该让系统处于中间状态(部分清理但未恢复)
用户体验:用户期望备份/恢复是原子操作,要么完全成功要么完全失败
建议优先级
高 - 这个bug导致恢复功能在Docker环境中完全不可用,且存在数据丢失风险。
希望开发团队能够修复这个设计缺陷,让恢复功能能够正确处理Docker挂载目录,实现完整的配置恢复。
相关文件
受影响的源码文件:backup/restore.go中的清理和恢复逻辑
需要改进的错误处理机制和挂载点检测
备注:这个问题的核心是恢复流程需要区分"删除目录"和"清空目录内容"的不同场景,特别是在Docker挂载环境下
@0xJacky commented on GitHub (Nov 10, 2025):
感谢反馈,已修复