diff --git a/agent/app/service/backup_container.go b/agent/app/service/backup_container.go index eebdf121e9a5..48214605f9b4 100644 --- a/agent/app/service/backup_container.go +++ b/agent/app/service/backup_container.go @@ -596,6 +596,7 @@ func stepRecreateContainer(recoverCtx *containerRecoverContext, taskItem *task.T } networkConfig, extraNetworks := buildContainerRecoverNetworkConfig(recoverCtx.inspectInfo.NetworkSettings, hostConfig) + removeBridgeDriverIPAM(recoverCtx.client, networkConfig, extraNetworks) createRes, err := recoverCtx.client.ContainerCreate(ctx, config, hostConfig, networkConfig, nil, recoverCtx.targetName) if err != nil { return err @@ -615,6 +616,28 @@ func stepRecreateContainer(recoverCtx *containerRecoverContext, taskItem *task.T return nil } +func removeBridgeDriverIPAM(cli *client.Client, primary *network.NetworkingConfig, extras map[string]*network.EndpointSettings) { + if primary != nil { + removeBridgeDriverIPAMFromEndpoints(cli, primary.EndpointsConfig) + } + removeBridgeDriverIPAMFromEndpoints(cli, extras) +} + +func removeBridgeDriverIPAMFromEndpoints(cli *client.Client, endpoints map[string]*network.EndpointSettings) { + for netName, endpoint := range endpoints { + if endpoint == nil || endpoint.IPAMConfig == nil { + continue + } + info, err := cli.NetworkInspect(context.Background(), netName, network.InspectOptions{}) + if err != nil { + continue + } + if info.Driver == "bridge" { + endpoint.IPAMConfig = nil + } + } +} + func ensureContainerRecoverNetworks(recoverCtx *containerRecoverContext) error { if recoverCtx.inspectInfo.NetworkSettings == nil { return nil diff --git a/frontend/src/components/backup/index.vue b/frontend/src/components/backup/index.vue index 305e15dd0c95..e9313c457e94 100644 --- a/frontend/src/components/backup/index.vue +++ b/frontend/src/components/backup/index.vue @@ -193,6 +193,8 @@ import { useGlobalStore } from '@/composables/useGlobalStore'; import { mysqlArgs } from '@/views/cronjob/cronjob/helper'; const { currentNode } = useGlobalStore(); +const emit = defineEmits(['close']); + const PushApp = defineAsyncComponent(async () => { const modules = import.meta.glob('@/xpack/views/appstore/push-app/index.vue'); const loader = modules['/src/xpack/views/appstore/push-app/index.vue']; @@ -258,6 +260,7 @@ const acceptParams = (params: DialogProps): void => { }; const handleClose = () => { backupVisible.value = false; + emit('close'); }; const handleBackupClose = () => { open.value = false; diff --git a/frontend/src/components/drawer-pro/index.vue b/frontend/src/components/drawer-pro/index.vue index 362ef8be06dc..e72c373a46d4 100644 --- a/frontend/src/components/drawer-pro/index.vue +++ b/frontend/src/components/drawer-pro/index.vue @@ -132,7 +132,6 @@ const handleBack = () => { } else { localOpenPage.value = false; globalStore.isFullScreen = false; - emit('close'); } }; emit('beforeClose', done); @@ -142,7 +141,6 @@ const handleBack = () => { } else { localOpenPage.value = false; globalStore.isFullScreen = false; - emit('close'); } } }; diff --git a/frontend/src/views/container/compose/index.vue b/frontend/src/views/container/compose/index.vue index 3a8f8ae17873..d15c01578e22 100644 --- a/frontend/src/views/container/compose/index.vue +++ b/frontend/src/views/container/compose/index.vue @@ -330,7 +330,6 @@