Skip to content

Commit e262f4f

Browse files
fix: 解决创建PHP运行环境报错的问题 (#1882)
1 parent f4d5b54 commit e262f4f

File tree

2 files changed

+29
-33
lines changed

2 files changed

+29
-33
lines changed

backend/app/service/runtime.go

+2-7
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,6 @@ func (r *RuntimeService) Create(create request.RuntimeCreate) (err error) {
9898
if err != nil {
9999
return
100100
}
101-
composeService, err := getComposeService(create.Name, newNameDir, composeContent, envContent, false)
102-
if err != nil {
103-
return
104-
}
105101
runtime := &model.Runtime{
106102
Name: create.Name,
107103
DockerCompose: string(composeContent),
@@ -117,7 +113,7 @@ func (r *RuntimeService) Create(create request.RuntimeCreate) (err error) {
117113
if err = runtimeRepo.Create(context.Background(), runtime); err != nil {
118114
return
119115
}
120-
go buildRuntime(runtime, composeService, "")
116+
go buildRuntime(runtime, "")
121117
return
122118
}
123119

@@ -260,7 +256,6 @@ func (r *RuntimeService) Update(req request.RuntimeUpdate) error {
260256
if err != nil {
261257
return err
262258
}
263-
composeService, err := getComposeService(runtime.Name, runtimeDir, composeContent, envContent, false)
264259
if err != nil {
265260
return err
266261
}
@@ -277,6 +272,6 @@ func (r *RuntimeService) Update(req request.RuntimeUpdate) error {
277272
if err != nil {
278273
return err
279274
}
280-
go buildRuntime(runtime, composeService, imageID)
275+
go buildRuntime(runtime, imageID)
281276
return nil
282277
}

backend/app/service/runtime_utils.go

+27-26
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,50 @@
11
package service
22

33
import (
4+
"bytes"
45
"fmt"
56
"github.com/1Panel-dev/1Panel/backend/app/model"
67
"github.com/1Panel-dev/1Panel/backend/buserr"
78
"github.com/1Panel-dev/1Panel/backend/constant"
89
"github.com/1Panel-dev/1Panel/backend/global"
910
"github.com/1Panel-dev/1Panel/backend/utils/docker"
1011
"github.com/1Panel-dev/1Panel/backend/utils/files"
11-
"github.com/docker/cli/cli/command"
1212
"github.com/subosito/gotenv"
13+
"io"
1314
"os"
15+
"os/exec"
1416
"path"
1517
"strings"
1618
)
1719

18-
func buildRuntime(runtime *model.Runtime, service *docker.ComposeService, oldImageID string) {
19-
err := service.ComposeBuild()
20+
func buildRuntime(runtime *model.Runtime, oldImageID string) {
21+
runtimePath := path.Join(constant.RuntimeDir, runtime.Type, runtime.Name)
22+
composePath := path.Join(runtimePath, "docker-compose.yml")
23+
logPath := path.Join(runtimePath, "build.log")
24+
25+
logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
26+
if err != nil {
27+
fmt.Println("Failed to open log file:", err)
28+
return
29+
}
30+
defer func() {
31+
_ = logFile.Close()
32+
}()
33+
34+
cmd := exec.Command("docker-compose", "-f", composePath, "build")
35+
multiWriterStdout := io.MultiWriter(os.Stdout, logFile)
36+
cmd.Stdout = multiWriterStdout
37+
var stderrBuf bytes.Buffer
38+
multiWriterStderr := io.MultiWriter(&stderrBuf, logFile, os.Stderr)
39+
cmd.Stderr = multiWriterStderr
40+
41+
err = cmd.Run()
2042
if err != nil {
2143
runtime.Status = constant.RuntimeError
22-
runtime.Message = buserr.New(constant.ErrImageBuildErr).Error() + ":" + err.Error()
44+
runtime.Message = buserr.New(constant.ErrImageBuildErr).Error() + ":" + stderrBuf.String()
2345
} else {
2446
runtime.Status = constant.RuntimeNormal
47+
runtime.Message = ""
2548
if oldImageID != "" {
2649
client, err := docker.NewClient()
2750
if err == nil {
@@ -83,25 +106,3 @@ func handleParams(image, runtimeType, runtimeDir string, params map[string]inter
83106
envContent = []byte(envStr)
84107
return
85108
}
86-
87-
func getComposeService(name, runtimeDir string, composeFile, env []byte, skipNormalization bool) (*docker.ComposeService, error) {
88-
project, err := docker.GetComposeProject(name, runtimeDir, composeFile, env, skipNormalization)
89-
if err != nil {
90-
return nil, err
91-
}
92-
logPath := path.Join(runtimeDir, "build.log")
93-
fileOp := files.NewFileOp()
94-
if fileOp.Stat(logPath) {
95-
_ = fileOp.DeleteFile(logPath)
96-
}
97-
file, err := os.Create(logPath)
98-
if err != nil {
99-
return nil, err
100-
}
101-
composeService, err := docker.NewComposeService(command.WithOutputStream(file))
102-
if err != nil {
103-
return nil, err
104-
}
105-
composeService.SetProject(project)
106-
return composeService, nil
107-
}

0 commit comments

Comments
 (0)