diff --git a/agent/app/service/app_utils.go b/agent/app/service/app_utils.go index ed1dac705141..313803fee13a 100644 --- a/agent/app/service/app_utils.go +++ b/agent/app/service/app_utils.go @@ -2246,10 +2246,39 @@ func isEditCompose(installed model.AppInstall) bool { if rawCompose == "" || err != nil { return false } - if rawCompose != installed.DockerCompose { - return true + equal, err := composeEqualExceptImage(rawCompose, installed.DockerCompose) + if err != nil { + return false + } + return !equal +} + +func composeEqualExceptImage(expected, current string) (bool, error) { + expectedCompose := make(map[string]interface{}) + if err := yaml.Unmarshal([]byte(expected), &expectedCompose); err != nil { + return false, err + } + currentCompose := make(map[string]interface{}) + if err := yaml.Unmarshal([]byte(current), ¤tCompose); err != nil { + return false, err + } + removeComposeServiceImages(expectedCompose) + removeComposeServiceImages(currentCompose) + return reflect.DeepEqual(expectedCompose, currentCompose), nil +} + +func removeComposeServiceImages(composeMap map[string]interface{}) { + services, ok := composeMap["services"].(map[string]interface{}) + if !ok { + return + } + for _, service := range services { + serviceMap, ok := service.(map[string]interface{}) + if !ok { + continue + } + delete(serviceMap, "image") } - return false } func getAppVersions(key string, details []model.AppDetail) []string {