diff --git a/agent/app/dto/snapshot.go b/agent/app/dto/snapshot.go
index 29d8642e3..fd19b1126 100644
--- a/agent/app/dto/snapshot.go
+++ b/agent/app/dto/snapshot.go
@@ -23,6 +23,7 @@ type SnapshotCreate struct {
BackupData []DataTree `json:"backupData"`
PanelData []DataTree `json:"panelData"`
+ WithDockerConf bool `json:"withDockerConf"`
WithMonitorData bool `json:"withMonitorData"`
WithLoginLog bool `json:"withLoginLog"`
WithOperationLog bool `json:"withOperationLog"`
@@ -37,6 +38,7 @@ type SnapshotData struct {
BackupData []DataTree `json:"backupData"`
PanelData []DataTree `json:"panelData"`
+ WithDockerConf bool `json:"withDockerConf"`
WithMonitorData bool `json:"withMonitorData"`
WithLoginLog bool `json:"withLoginLog"`
WithOperationLog bool `json:"withOperationLog"`
diff --git a/agent/app/model/snapshot.go b/agent/app/model/snapshot.go
index afb4610e7..8a4801c9c 100644
--- a/agent/app/model/snapshot.go
+++ b/agent/app/model/snapshot.go
@@ -15,9 +15,11 @@ type Snapshot struct {
TaskRecoverID string `json:"taskRecoverID"`
TaskRollbackID string `json:"taskRollbackID"`
- AppData string `json:"appData"`
- PanelData string `json:"panelData"`
- BackupData string `json:"backupData"`
+ AppData string `json:"appData"`
+ PanelData string `json:"panelData"`
+ BackupData string `json:"backupData"`
+
+ WithDockerConf bool `json:"withDockerConf"`
WithMonitorData bool `json:"withMonitorData"`
WithLoginLog bool `json:"withLoginLog"`
WithOperationLog bool `json:"withOperationLog"`
diff --git a/agent/app/service/snapshot.go b/agent/app/service/snapshot.go
index e94b33676..486a82a76 100644
--- a/agent/app/service/snapshot.go
+++ b/agent/app/service/snapshot.go
@@ -110,6 +110,7 @@ func (u *SnapshotService) LoadSnapshotData() (dto.SnapshotData, error) {
if err != nil {
return data, err
}
+ data.WithDockerConf = true
data.PanelData, err = loadPanelFile(fileOp)
if err != nil {
return data, err
diff --git a/agent/app/service/snapshot_create.go b/agent/app/service/snapshot_create.go
index bb47e3712..565e7c2b2 100644
--- a/agent/app/service/snapshot_create.go
+++ b/agent/app/service/snapshot_create.go
@@ -51,6 +51,7 @@ func (u *SnapshotService) SnapshotCreate(parentTask *task.Task, req dto.Snapshot
AppData: string(appItem),
PanelData: string(panelItem),
BackupData: string(backupItem),
+ WithDockerConf: req.WithDockerConf,
WithMonitorData: req.WithMonitorData,
WithLoginLog: req.WithLoginLog,
WithOperationLog: req.WithOperationLog,
@@ -148,7 +149,7 @@ func handleSnapshot(req dto.SnapshotCreate, taskItem *task.Task, jobID, retry, t
if len(req.InterruptStep) == 0 || req.InterruptStep == "SnapBaseInfo" {
taskItem.AddSubTaskWithAliasAndOps(
"SnapBaseInfo",
- func(t *task.Task) error { return snapBaseData(itemHelper, baseDir) },
+ func(t *task.Task) error { return snapBaseData(itemHelper, baseDir, req.WithDockerConf) },
nil, int(retry), time.Duration(timeout)*time.Second,
)
req.InterruptStep = ""
@@ -287,7 +288,7 @@ func loadDbConn(snap *snapHelper, targetDir string, req dto.SnapshotCreate) erro
return nil
}
-func snapBaseData(snap snapHelper, targetDir string) error {
+func snapBaseData(snap snapHelper, targetDir string, withDockerConf bool) error {
snap.Task.Log("---------------------- 2 / 8 ----------------------")
snap.Task.LogStart(i18n.GetMsgByKey("SnapBaseInfo"))
@@ -324,11 +325,13 @@ func snapBaseData(snap snapHelper, targetDir string) error {
return err
}
- if snap.FileOp.Stat(constant.DaemonJsonPath) {
- err = snap.FileOp.CopyFile(constant.DaemonJsonPath, targetDir)
- snap.Task.LogWithStatus(i18n.GetWithName("SnapCopy", constant.DaemonJsonPath), err)
- if err != nil {
- return err
+ if withDockerConf {
+ if snap.FileOp.Stat(constant.DaemonJsonPath) {
+ err = snap.FileOp.CopyFile(constant.DaemonJsonPath, targetDir)
+ snap.Task.LogWithStatus(i18n.GetWithName("SnapCopy", constant.DaemonJsonPath), err)
+ if err != nil {
+ return err
+ }
}
}
diff --git a/agent/app/service/snapshot_recover.go b/agent/app/service/snapshot_recover.go
index 7d94d765f..61b0f0a20 100644
--- a/agent/app/service/snapshot_recover.go
+++ b/agent/app/service/snapshot_recover.go
@@ -392,14 +392,10 @@ func recoverBaseData(src string, itemHelper *snapRecoverHelper) error {
return err
}
- daemonJsonPath := constant.DaemonJsonPath
- _, errSrc := os.Stat(path.Join(src, "daemon.json"))
- _, errPath := os.Stat(daemonJsonPath)
- if os.IsNotExist(errSrc) && os.IsNotExist(errPath) {
+ if !itemHelper.FileOp.Stat(path.Join(src, "daemon.json")) {
itemHelper.Task.Log(i18n.GetMsgByKey("RecoverDaemonJsonEmpty"))
return nil
- }
- if errSrc == nil {
+ } else {
err = itemHelper.FileOp.CopyFile(path.Join(src, "daemon.json"), "/etc/docker")
itemHelper.Task.Log(i18n.GetMsgByKey("RecoverDaemonJson"))
if err != nil {
diff --git a/agent/app/service/snapshot_rollback.go b/agent/app/service/snapshot_rollback.go
index c5472d6de..a58b1dfa2 100644
--- a/agent/app/service/snapshot_rollback.go
+++ b/agent/app/service/snapshot_rollback.go
@@ -78,7 +78,10 @@ func (u *SnapshotService) SnapshotRollback(req dto.SnapshotRecover) error {
taskItem.AddSubTask(
i18n.GetWithName("SnapCopy", constant.DaemonJsonPath),
func(t *task.Task) error {
- return FileOp.CopyFile(path.Join(baseDir, "daemon.json"), "/etc/docker")
+ if FileOp.Stat(path.Join(baseDir, "daemon.json")) {
+ return FileOp.CopyFile(path.Join(baseDir, "daemon.json"), "/etc/docker")
+ }
+ return nil
},
nil,
)
diff --git a/agent/init/migration/migrations/init.go b/agent/init/migration/migrations/init.go
index d38ce61c7..4e980199c 100644
--- a/agent/init/migration/migrations/init.go
+++ b/agent/init/migration/migrations/init.go
@@ -337,7 +337,7 @@ var UpdatePHPRuntime = &gormigrate.Migration{
},
}
var AddSnapshotIgnore = &gormigrate.Migration{
- ID: "20250627-add-snapshot-ignore",
+ ID: "20250628-add-snapshot-ignore",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
&model.Snapshot{},
diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts
index 5c758a2bf..f04b19b43 100644
--- a/frontend/src/lang/modules/en.ts
+++ b/frontend/src/lang/modules/en.ts
@@ -1828,6 +1828,7 @@ const message = {
systemLog: 'Retain System Log',
taskLog: 'Retain Task Log',
monitorData: 'Retain Monitoring Data',
+ dockerConf: 'Retain Docker Configuration',
selectAllImage: 'Backup All Application Images',
logLabel: 'Log',
agentLabel: 'Node Configuration',
diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts
index 3b229dbd0..e8dd78691 100644
--- a/frontend/src/lang/modules/ja.ts
+++ b/frontend/src/lang/modules/ja.ts
@@ -1749,6 +1749,7 @@ const message = {
systemLog: 'システムログを保持',
taskLog: 'タスクログを保持',
monitorData: '監視データを保持',
+ dockerConf: 'Docker設定保持',
selectAllImage: 'すべてのアプリイメージをバックアップ',
logLabel: 'ログ',
agentLabel: 'ノード設定',
diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts
index 4ea60dc7a..094861c84 100644
--- a/frontend/src/lang/modules/ko.ts
+++ b/frontend/src/lang/modules/ko.ts
@@ -1722,6 +1722,7 @@ const message = {
systemLog: '시스템 로그 유지',
taskLog: '작업 로그 유지',
monitorData: '모니터링 데이터 유지',
+ dockerConf: 'Docker 설정',
selectAllImage: '모든 앱 이미지를 백업',
logLabel: '로그',
agentLabel: '노드 설정',
diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts
index a1baa9dcf..ce842c49a 100644
--- a/frontend/src/lang/modules/ms.ts
+++ b/frontend/src/lang/modules/ms.ts
@@ -1805,6 +1805,7 @@ const message = {
systemLog: 'Simpan log sistem',
taskLog: 'Simpan log tugas',
monitorData: 'Simpan data pemantauan',
+ dockerConf: 'Simpan Konfigurasi Docker',
selectAllImage: 'Simpan semua imej aplikasi',
logLabel: 'Log',
agentLabel: 'Konfigurasi Nod',
diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts
index 8130b1247..74e611292 100644
--- a/frontend/src/lang/modules/pt-br.ts
+++ b/frontend/src/lang/modules/pt-br.ts
@@ -1790,6 +1790,7 @@ const message = {
systemLog: 'Manter logs do sistema',
taskLog: 'Manter logs de tarefas',
monitorData: 'Manter dados de monitoramento',
+ dockerConf: 'Manter Configuração do Docker',
selectAllImage: 'Fazer backup de todas as imagens de aplicativos',
logLabel: 'Log',
agentLabel: 'Configuração do Nó',
diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts
index 66b7ed7a1..10dfd3de6 100644
--- a/frontend/src/lang/modules/ru.ts
+++ b/frontend/src/lang/modules/ru.ts
@@ -1787,6 +1787,7 @@ const message = {
systemLog: 'Сохранять системный журнал',
taskLog: 'Сохранять журнал задач',
monitorData: 'Сохранять данные мониторинга',
+ dockerConf: 'Сохранять Конфигурация Docker',
selectAllImage: 'Резервное копирование всех образов приложений',
logLabel: 'Журнал',
agentLabel: 'Конфигурация узла',
diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts
index 2b43fa468..199d1a729 100644
--- a/frontend/src/lang/modules/zh-Hant.ts
+++ b/frontend/src/lang/modules/zh-Hant.ts
@@ -1638,6 +1638,7 @@ const message = {
systemLog: '保留系統日誌',
taskLog: '保留任務日誌',
monitorData: '保留監控數據',
+ dockerConf: '保留 Docker 配置',
selectAllImage: '備份所有應用鏡像',
logLabel: '日誌',
agentLabel: '節點配置',
diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts
index f1bbe8db5..2f969e351 100644
--- a/frontend/src/lang/modules/zh.ts
+++ b/frontend/src/lang/modules/zh.ts
@@ -1629,6 +1629,7 @@ const message = {
stepBackupData: '备份数据',
stepOtherData: '其他数据',
monitorData: '监控数据',
+ dockerConf: 'Docker 配置',
selectAllImage: '备份所有应用镜像',
logLabel: '日志',
agentLabel: '节点配置',
diff --git a/frontend/src/views/cronjob/cronjob/record/index.vue b/frontend/src/views/cronjob/cronjob/record/index.vue
index e9e37101e..357d240ed 100644
--- a/frontend/src/views/cronjob/cronjob/record/index.vue
+++ b/frontend/src/views/cronjob/cronjob/record/index.vue
@@ -134,11 +134,13 @@
{{ $t('commons.table.interval') }}
-
- {{ currentRecord?.interval }} ms
-
-
- {{ currentRecord?.interval! / 1000 }} s
+
+
+ {{ currentRecord?.interval }} ms
+
+
+ {{ currentRecord?.interval! / 1000 }} s
+
diff --git a/frontend/src/views/setting/snapshot/create/index.vue b/frontend/src/views/setting/snapshot/create/index.vue
index e01641ed8..1c46a0fe6 100644
--- a/frontend/src/views/setting/snapshot/create/index.vue
+++ b/frontend/src/views/setting/snapshot/create/index.vue
@@ -126,6 +126,9 @@
+
+
+
@@ -195,6 +198,7 @@ const form = reactive({
secret: '',
backupAllImage: false,
+ withDockerConf: true,
withLoginLog: false,
withOperationLog: false,
withSystemLog: false,