diff --git a/backend/app/dto/request/app.go b/backend/app/dto/request/app.go index 015470cfa..7a7fa461e 100644 --- a/backend/app/dto/request/app.go +++ b/backend/app/dto/request/app.go @@ -32,6 +32,7 @@ type AppContainerConfig struct { EditCompose bool `json:"editCompose"` DockerCompose string `json:"dockerCompose"` HostMode bool `json:"hostMode"` + PullImage bool `json:"pullImage"` } type AppInstalledSearch struct { @@ -67,6 +68,7 @@ type AppInstalledOperate struct { DeleteBackup bool `json:"deleteBackup"` DeleteDB bool `json:"deleteDB"` Backup bool `json:"backup"` + PullImage bool `json:"pullImage"` } type AppInstalledUpdate struct { diff --git a/backend/app/service/app.go b/backend/app/service/app.go index 1f1798334..da911590c 100644 --- a/backend/app/service/app.go +++ b/backend/app/service/app.go @@ -459,7 +459,7 @@ func (a AppService) Install(ctx context.Context, req request.AppInstallCreate) ( if err = runScript(appInstall, "init"); err != nil { return } - upApp(appInstall) + upApp(appInstall, req.PullImage) }() go updateToolApp(appInstall) return diff --git a/backend/app/service/app_install.go b/backend/app/service/app_install.go index 6a39e73d7..8d7206d25 100644 --- a/backend/app/service/app_install.go +++ b/backend/app/service/app_install.go @@ -263,7 +263,7 @@ func (a *AppInstallService) Operate(req request.AppInstalledOperate) error { case constant.Sync: return syncByID(install.ID) case constant.Upgrade: - return upgradeInstall(install.ID, req.DetailId, req.Backup) + return upgradeInstall(install.ID, req.DetailId, req.Backup, req.PullImage) case constant.Reload: return opNginx(install.ContainerName, constant.NginxReload) default: diff --git a/backend/app/service/app_utils.go b/backend/app/service/app_utils.go index 8232b3f28..529f76ce8 100644 --- a/backend/app/service/app_utils.go +++ b/backend/app/service/app_utils.go @@ -433,12 +433,12 @@ func deleteLink(ctx context.Context, install *model.AppInstall, deleteDB bool, f return appInstallResourceRepo.DeleteBy(ctx, appInstallResourceRepo.WithAppInstallId(install.ID)) } -func upgradeInstall(installId uint, detailId uint, backup bool) error { - install, err := appInstallRepo.GetFirst(commonRepo.WithByID(installId)) +func upgradeInstall(installID uint, detailID uint, backup, pullImage bool) error { + install, err := appInstallRepo.GetFirst(commonRepo.WithByID(installID)) if err != nil { return err } - detail, err := appDetailRepo.GetFirst(commonRepo.WithByID(detailId)) + detail, err := appDetailRepo.GetFirst(commonRepo.WithByID(detailID)) if err != nil { return err } @@ -556,7 +556,7 @@ func upgradeInstall(installId uint, detailId uint, backup bool) error { install.DockerCompose = string(composeByte) install.Version = detail.Version - install.AppDetailId = detailId + install.AppDetailId = detailID if out, err := compose.Down(install.GetComposePath()); err != nil { if out != "" { @@ -581,21 +581,23 @@ func upgradeInstall(installId uint, detailId uint, backup bool) error { return } - images, err := composeV2.GetDockerComposeImages(install.Name, content, []byte(detail.DockerCompose)) - if err != nil { - upErr = err - return - } - dockerCli, err := composeV2.NewClient() - if err != nil { - upErr = err - return - } - for _, image := range images { - if err = dockerCli.PullImage(image, true); err != nil { - upErr = buserr.WithNameAndErr("ErrDockerPullImage", "", err) + if pullImage { + images, err := composeV2.GetDockerComposeImages(install.Name, content, []byte(detail.DockerCompose)) + if err != nil { + upErr = err return } + dockerCli, err := composeV2.NewClient() + if err != nil { + upErr = err + return + } + for _, image := range images { + if err = dockerCli.PullImage(image, true); err != nil { + upErr = buserr.WithNameAndErr("ErrDockerPullImage", "", err) + return + } + } } if upErr = fileOp.WriteFile(install.GetComposePath(), strings.NewReader(install.DockerCompose), 0775); upErr != nil { @@ -839,14 +841,14 @@ func checkContainerNameIsExist(containerName, appDir string) (bool, error) { return false, nil } -func upApp(appInstall *model.AppInstall) { +func upApp(appInstall *model.AppInstall, pullImages bool) { upProject := func(appInstall *model.AppInstall) (err error) { if err == nil { var ( out string errMsg string ) - if appInstall.App.Type != "php" { + if pullImages && appInstall.App.Type != "php" { out, err = compose.Pull(appInstall.GetComposePath()) if err != nil { if out != "" { @@ -861,6 +863,7 @@ func upApp(appInstall *model.AppInstall) { return err } } + out, err = compose.Up(appInstall.GetComposePath()) if err != nil { if out != "" { diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts index c92ae7ff9..4cad3bd9d 100644 --- a/frontend/src/lang/modules/tw.ts +++ b/frontend/src/lang/modules/tw.ts @@ -1698,7 +1698,7 @@ const message = { disable: '未啟用', disableLeechHelper: '是否禁用防盜鏈', disableLeech: '禁用防盜鏈', - ipv6: '監聽 IPV6 端口', + ipv6: '監聽 IPV6', leechReturnError: '請填寫 HTTP 狀態碼', selectAcme: '選擇 Acme 賬號', imported: '手動創建', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index b2564eb5e..313201a59 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1698,7 +1698,7 @@ const message = { disable: '未启用', disableLeechHelper: '是否禁用防盗链', disableLeech: '禁用防盗链', - ipv6: '监听 IPV6 端口', + ipv6: '监听 IPV6', leechReturnError: '请填写 HTTP 状态码', selectAcme: '选择 acme 账号', imported: '手动创建', diff --git a/frontend/src/views/app-store/detail/install/index.vue b/frontend/src/views/app-store/detail/install/index.vue index c6e88f7fd..4241c4f25 100644 --- a/frontend/src/views/app-store/detail/install/index.vue +++ b/frontend/src/views/app-store/detail/install/index.vue @@ -103,11 +103,14 @@ {{ $t('container.limitHelper', [limits.memory]) }}{{ req.memoryUnit }}B - {{ $t('app.editComposeHelper') }} + + + {{ $t('container.forcePullHelper') }} +
({ dockerCompose: '', version: '', appID: '', + pullImage: true, }); const req = reactive(initData()); const limits = ref({ diff --git a/frontend/src/views/app-store/installed/upgrade/index.vue b/frontend/src/views/app-store/installed/upgrade/index.vue index 4b782f0c8..9bd7ce5ca 100644 --- a/frontend/src/views/app-store/installed/upgrade/index.vue +++ b/frontend/src/views/app-store/installed/upgrade/index.vue @@ -31,6 +31,10 @@ {{ $t('app.backupAppHelper') }} + + + {{ $t('container.forcePullHelper') }} + @@ -88,6 +92,7 @@ const operateReq = reactive({ operate: 'upgrade', installId: 0, backup: true, + pullImage: true, }); const resourceName = ref(''); const rules = ref({