我有一个基于 Docker 的 Discourse 实例,使用的是 DigitalOcean 提供的模板构建。首次启用自动备份时,按预期在 /var/discourse/shared/standalone/backups/default/... 目录下生成了转储文件。
我决定删除 backups 目录,并创建一个指向卷的 backups 符号链接。此后,备份任务一直失败(我也进入容器并手动触发了备份,错误信息相同)。
以下是堆栈跟踪:
File exists @ dir_s_mkdir - /var/www/discourse/public/backups
/usr/local/lib/ruby/2.7.0/fileutils.rb:250:in `mkdir'
/usr/local/lib/ruby/2.7.0/fileutils.rb:250:in `fu_mkdir'
/usr/local/lib/ruby/2.7.0/fileutils.rb:228:in `block (2 levels) in mkdir_p'
/usr/local/lib/ruby/2.7.0/fileutils.rb:226:in `reverse_each'
/usr/local/lib/ruby/2.7.0/fileutils.rb:226:in `block in mkdir_p'
/usr/local/lib/ruby/2.7.0/fileutils.rb:211:in `each'
/usr/local/lib/ruby/2.7.0/fileutils.rb:211:in `mkdir_p'
/var/www/discourse/lib/backup_restore/local_backup_store.rb:10:in `base_directory'
...
编辑
我进入容器进行了一些调试。原来,有一个符号链接指向 /var/www/discourse/public/backups –\u003e /shared/backups(在宿主机上),而在我这里,该宿主机路径本身也是一个符号链接。存在文件权限问题,导致 Ruby 进程无法写入宿主机上的 backups 目录。
有什么建议吗?