From 5bb77d71768e7c2f9ed17d7f3099f13276c5f375 Mon Sep 17 00:00:00 2001 From: zhengkunwang <31820853+zhengkunwang223@users.noreply.github.com> Date: Sun, 8 Oct 2023 04:06:14 -0500 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=9B=E5=BB=BA=E3=80=81=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20node.js=20=E7=8E=AF=E5=A2=83=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=E5=90=8D=E7=A7=B0=E6=A0=A1=E9=AA=8C=20(#2461?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/service/runtime.go | 17 +++++++++++++++++ backend/app/service/runtime_utils.go | 15 +++++++++++++++ 2 files changed, 32 insertions(+) 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 +}