diff --git a/backend/app/service/runtime.go b/backend/app/service/runtime.go index b12a58221..55bd476c7 100644 --- a/backend/app/service/runtime.go +++ b/backend/app/service/runtime.go @@ -78,6 +78,11 @@ func (r *RuntimeService) Create(create request.RuntimeCreate) (err error) { if err = checkPortExist(create.Port); err != nil { return err } + if containerName, ok := create.Params["CONTAINER_NAME"]; ok { + if err := checkContainerName(containerName.(string)); err != nil { + return err + } + } } appDetail, err := appDetailRepo.GetFirst(commonRepo.WithByID(create.AppDetailID)) @@ -309,6 +314,18 @@ func (r *RuntimeService) Update(req request.RuntimeUpdate) error { } runtime.Port = req.Port } + if containerName, ok := req.Params["CONTAINER_NAME"]; ok { + envs, err := gotenv.Unmarshal(runtime.Env) + if err != nil { + return err + } + oldContainerName := envs["CONTAINER_NAME"] + if containerName != oldContainerName { + if err := checkContainerName(containerName.(string)); err != nil { + return err + } + } + } } projectDir := path.Join(constant.RuntimeDir, runtime.Type, runtime.Name) diff --git a/backend/app/service/runtime_utils.go b/backend/app/service/runtime_utils.go index 7c38517c8..0c5ceb92c 100644 --- a/backend/app/service/runtime_utils.go +++ b/backend/app/service/runtime_utils.go @@ -328,3 +328,18 @@ func handleParams(create request.RuntimeCreate, projectDir string) (composeConte envContent = []byte(envStr) return } + +func checkContainerName(name string) error { + dockerCli, err := docker.NewClient() + if err != nil { + return err + } + names, err := dockerCli.ListContainersByName([]string{name}) + if err != nil { + return err + } + if len(names) > 0 { + return buserr.New(constant.ErrContainerName) + } + return nil +}