Browse Source

fix: 容器部分操作动态修改执行命令 (#6750)

Refs #3242
pull/6759/head
John Bro 1 month ago committed by GitHub
parent
commit
2f147dde13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 62
      backend/app/service/docker.go
  2. 19
      backend/app/service/firewall.go
  3. 13
      backend/app/service/image_repo.go
  4. 4
      backend/app/service/snapshot_recover.go

62
backend/app/service/docker.go

@ -201,9 +201,8 @@ func (u *DockerService) UpdateConf(req dto.SettingUpdate) error {
} }
if len(daemonMap) == 0 { if len(daemonMap) == 0 {
_ = os.Remove(constant.DaemonJsonPath) _ = os.Remove(constant.DaemonJsonPath)
stdout, err := cmd.Exec("systemctl restart docker") if err := restartDocker(); err != nil {
if err != nil { return err
return errors.New(string(stdout))
} }
return nil return nil
} }
@ -218,9 +217,8 @@ func (u *DockerService) UpdateConf(req dto.SettingUpdate) error {
return err return err
} }
stdout, err := cmd.Exec("systemctl restart docker") if err := restartDocker(); err != nil {
if err != nil { return err
return errors.New(string(stdout))
} }
return nil return nil
} }
@ -268,9 +266,8 @@ func (u *DockerService) UpdateLogOption(req dto.LogOption) error {
return err return err
} }
stdout, err := cmd.Exec("systemctl restart docker") if err := restartDocker(); err != nil {
if err != nil { return err
return errors.New(string(stdout))
} }
return nil return nil
} }
@ -312,9 +309,8 @@ func (u *DockerService) UpdateIpv6Option(req dto.Ipv6Option) error {
return err return err
} }
stdout, err := cmd.Exec("systemctl restart docker") if err := restartDocker(); err != nil {
if err != nil { return err
return errors.New(string(stdout))
} }
return nil return nil
} }
@ -322,9 +318,8 @@ func (u *DockerService) UpdateIpv6Option(req dto.Ipv6Option) error {
func (u *DockerService) UpdateConfByFile(req dto.DaemonJsonUpdateByFile) error { func (u *DockerService) UpdateConfByFile(req dto.DaemonJsonUpdateByFile) error {
if len(req.File) == 0 { if len(req.File) == 0 {
_ = os.Remove(constant.DaemonJsonPath) _ = os.Remove(constant.DaemonJsonPath)
stdout, err := cmd.Exec("systemctl restart docker") if err := restartDocker(); err != nil {
if err != nil { return err
return errors.New(string(stdout))
} }
return nil return nil
} }
@ -345,9 +340,8 @@ func (u *DockerService) UpdateConfByFile(req dto.DaemonJsonUpdateByFile) error {
return err return err
} }
stdout, err := cmd.Exec("systemctl restart docker") if err := restartDocker(); err != nil {
if err != nil { return err
return errors.New(string(stdout))
} }
return nil return nil
} }
@ -355,6 +349,10 @@ func (u *DockerService) UpdateConfByFile(req dto.DaemonJsonUpdateByFile) error {
func (u *DockerService) OperateDocker(req dto.DockerOperation) error { func (u *DockerService) OperateDocker(req dto.DockerOperation) error {
service := "docker" service := "docker"
sudo := cmd.SudoHandleCmd() sudo := cmd.SudoHandleCmd()
dockerCmd, err := getDockerRestartCommand()
if err != nil {
return err
}
if req.Operation == "stop" { if req.Operation == "stop" {
isSocketActive, _ := systemctl.IsActive("docker.socket") isSocketActive, _ := systemctl.IsActive("docker.socket")
if isSocketActive { if isSocketActive {
@ -371,9 +369,9 @@ func (u *DockerService) OperateDocker(req dto.DockerOperation) error {
} }
} }
stdout, err := cmd.Execf("systemctl %s %s ", req.Operation, service) stdout, err := cmd.Execf("%s %s %s", dockerCmd, req.Operation, service)
if err != nil { if err != nil {
return errors.New(string(stdout)) return errors.New(stdout)
} }
return nil return nil
} }
@ -434,3 +432,27 @@ func validateDockerConfig() error {
} }
return nil return nil
} }
func getDockerRestartCommand() (string, error) {
stdout, err := cmd.Exec("which docker")
if err != nil {
return "", fmt.Errorf("failed to find docker: %v", err)
}
dockerPath := stdout
if strings.Contains(dockerPath, "snap") {
return "snap", nil
}
return "systemctl", nil
}
func restartDocker() error {
restartCmd, err := getDockerRestartCommand()
if err != nil {
return err
}
stdout, err := cmd.Execf("%s restart docker", restartCmd)
if err != nil {
return fmt.Errorf("failed to restart Docker: %s", stdout)
}
return nil
}

19
backend/app/service/firewall.go

@ -179,6 +179,7 @@ func (u *FirewallService) OperateFirewall(operation string) error {
if err != nil { if err != nil {
return err return err
} }
needRestartDocker := false
switch operation { switch operation {
case "start": case "start":
if err := client.Start(); err != nil { if err := client.Start(); err != nil {
@ -188,26 +189,30 @@ func (u *FirewallService) OperateFirewall(operation string) error {
_ = client.Stop() _ = client.Stop()
return err return err
} }
_, _ = cmd.Exec("systemctl restart docker") needRestartDocker = true
return nil
case "stop": case "stop":
if err := client.Stop(); err != nil { if err := client.Stop(); err != nil {
return err return err
} }
_, _ = cmd.Exec("systemctl restart docker") needRestartDocker = true
return nil
case "restart": case "restart":
if err := client.Restart(); err != nil { if err := client.Restart(); err != nil {
return err return err
} }
_, _ = cmd.Exec("systemctl restart docker") needRestartDocker = true
return nil
case "disablePing": case "disablePing":
return u.updatePingStatus("0") return u.updatePingStatus("0")
case "enablePing": case "enablePing":
return u.updatePingStatus("1") return u.updatePingStatus("1")
default:
return fmt.Errorf("not supported operation: %s", operation)
} }
return fmt.Errorf("not support such operation: %s", operation) if needRestartDocker {
if err := restartDocker(); err != nil {
return err
}
}
return nil
} }
func (u *FirewallService) OperatePortRule(req dto.PortRuleOperate, reload bool) error { func (u *FirewallService) OperatePortRule(req dto.PortRuleOperate, reload bool) error {

13
backend/app/service/image_repo.go

@ -89,10 +89,8 @@ func (u *ImageRepoService) Create(req dto.ImageRepoCreate) error {
if err := validateDockerConfig(); err != nil { if err := validateDockerConfig(); err != nil {
return err return err
} }
if err := restartDocker(); err != nil {
stdout, err := cmd.Exec("systemctl restart docker") return err
if err != nil {
return errors.New(string(stdout))
} }
ticker := time.NewTicker(3 * time.Second) ticker := time.NewTicker(3 * time.Second)
defer ticker.Stop() defer ticker.Stop()
@ -166,13 +164,10 @@ func (u *ImageRepoService) Update(req dto.ImageRepoUpdate) error {
if err := validateDockerConfig(); err != nil { if err := validateDockerConfig(); err != nil {
return err return err
} }
if err := restartDocker(); err != nil {
stdout, err := cmd.Exec("systemctl restart docker") return err
if err != nil {
return errors.New(string(stdout))
} }
} }
upMap := make(map[string]interface{}) upMap := make(map[string]interface{})
upMap["download_url"] = req.DownloadUrl upMap["download_url"] = req.DownloadUrl
upMap["protocol"] = req.Protocol upMap["protocol"] = req.Protocol

4
backend/app/service/snapshot_recover.go

@ -231,7 +231,9 @@ func recoverDaemonJson(src string, fileOp files.FileOp) error {
} }
} }
_, _ = cmd.Exec("systemctl restart docker") if err := restartDocker(); err != nil {
return err
}
return nil return nil
} }

Loading…
Cancel
Save