錯誤訊息
{"level":"error","timestamp":"2025-06-16T18:10:43.426849691+08:00","message":"build failed","service":"orchestration-api","internal":true,"pid":1056502,"template.id":"yf0qzjw458rcn5nv80g5","debug_id":null,"error":"failed to create template 'yf0qzjw458rcn5nv80g5': [Unimplemented] unknown service TemplateService","stacktrace":"github.com/e2b-dev/infra/packages/shared/pkg/telemetry.ReportCriticalError\n\t/kok/todo-api/main4/packages/shared/pkg/telemetry/tracing.go:80\ngithub.com/e2b-dev/infra/packages/api/internal/handlers.(*APIStore).PostTemplatesTemplateIDBuildsBuildID\n\t/kok/todo-api/main4/packages/api/internal/handlers/template_start_build.go:160\ngithub.com/e2b-dev/infra/packages/api/internal/api.(*ServerInterfaceWrapper).PostTemplatesTemplateIDBuildsBuildID\n\t/kok/todo-api/main4/packages/api/internal/api/api.gen.go:848\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/context.go:185\ngithub.com/gin-contrib/zap.GinzapWithConfig.func1\n\t/root/go/pkg/mod/github.com/gin-contrib/zap@v1.1.4/zap.go:68\nmain.NewGinServer.func1\n\t/kok/todo-api/main4/packages/api/main.go:157\ngithub.com/e2b-dev/infra/packages/api/internal/middleware.ExcludeRoutes.func1\n\t/kok/todo-api/main4/packages/api/internal/middleware/exclude.go:14\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/context.go:185\ngithub.com/oapi-codegen/gin-middleware.OapiRequestValidatorWithOptions.func1\n\t/root/go/pkg/mod/github.com/oapi-codegen/gin-middleware@v1.0.1/oapi_validate.go:108\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/context.go:185\ngithub.com/gin-contrib/size.RequestSizeLimiter.func1\n\t/root/go/pkg/mod/github.com/gin-contrib/size@v0.0.0-20230212012657-e14a14094dc4/size.go:88\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/context.go:185\ngithub.com/gin-gonic/gin.CustomRecoveryWithWriter.func1\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/recovery.go:102\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/context.go:185\ngithub.com/e2b-dev/infra/packages/api/internal/middleware.IncludeRoutes.func1\n\t/kok/todo-api/main4/packages/api/internal/middleware/exclude.go:28\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/context.go:185\ngithub.com/e2b-dev/infra/packages/api/internal/middleware/otel/tracing.Middleware.func1\n\t/kok/todo-api/main4/packages/api/internal/middleware/otel/tracing/middleware.go:87\ngithub.com/e2b-dev/infra/packages/api/internal/middleware.ExcludeRoutes.func1\n\t/kok/todo-api/main4/packages/api/internal/middleware/exclude.go:14\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/context.go:185\ngithub.com/gin-gonic/gin.(*Engine).handleHTTPRequest\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/gin.go:633\ngithub.com/gin-gonic/gin.(*Engine).ServeHTTP\n\t/root/go/pkg/mod/github.com/gin-gonic/gin@v1.10.0/gin.go:589\nnet/http.serverHandler.ServeHTTP\n\t/usr/local/go/src/net/http/server.go:3301\nnet/http.(*conn).serve\n\t/usr/local/go/src/net/http/server.go:2102"}
錯在 /kok/todo-api/main4/packages/api/internal/api/api.gen.go:848
ORCHESTRATOR_SERVICES ?= template-manager只有3個選項
UnknownService ServiceType = “orch-unknown”
Orchestrator ServiceType = “orchestrator”
TemplateManager ServiceType = “template-manager”
package service
import (
"strings"
"github.com/e2b-dev/infra/packages/shared/pkg/env"
"github.com/e2b-dev/infra/packages/shared/pkg/utils"
)
type ServiceType string
const (
UnknownService ServiceType = "orch-unknown"
Orchestrator ServiceType = "orchestrator"
TemplateManager ServiceType = "template-manager"
)
// ParseServiceType converts a string to a ServiceType.
// It is case-insensitive and defaults to UnknownService.
func ParseServiceType(s string) ServiceType {
switch strings.ToLower(strings.TrimSpace(s)) {
case string(Orchestrator):
return Orchestrator
case string(TemplateManager):
return TemplateManager
default:
return UnknownService
}
}
// GetServices parses the ORCHESTRATOR_SERVICES environment variable
// and returns a slice of known ServiceTypes.
func GetServices() []ServiceType {
servicesEnv := env.GetEnv("ORCHESTRATOR_SERVICES", string(Orchestrator))
rawServiceNames := strings.Split(servicesEnv, ",")
var services []ServiceType
for _, name := range rawServiceNames {
service := ParseServiceType(name)
if service != UnknownService {
services = append(services, service)
}
}
return services
}
// GetServiceName returns a single string identifier for the given services.
// If multiple services are present, they are joined with underscores.
func GetServiceName(services []ServiceType) string {
if len(services) == 0 {
return string(UnknownService)
}
var builder strings.Builder
for i, s := range services {
if i > 0 {
builder.WriteString("_")
}
builder.WriteString(string(s))
}
return builder.String()
}
func GetClientID() string {
return utils.RequiredEnv("NODE_ID", "Nomad ID of the instance node")
}
這邊說明了RegistryProvider 有3個參數GCP_ARTIFACTS AWS_ECR Local
package artifacts_registry
import (
"context"
"errors"
"fmt"
"time"
v1 "github.com/google/go-containerregistry/pkg/v1"
"github.com/e2b-dev/infra/packages/shared/pkg/env"
)
type RegistryProvider string
const (
GCPStorageProvider RegistryProvider = "GCP_ARTIFACTS"
AWSStorageProvider RegistryProvider = "AWS_ECR"
LocalStorageProvider RegistryProvider = "Local"
DefaultRegistryProvider RegistryProvider = GCPStorageProvider
storageProviderEnv = "ARTIFACTS_REGISTRY_PROVIDER"
)
var (
ErrImageNotExists = errors.New("image does not exist")
)
type ArtifactsRegistry interface {
GetTag(ctx context.Context, templateId string, buildId string) (string, error)
GetImage(ctx context.Context, templateId string, buildId string, platform v1.Platform) (v1.Image, error)
Delete(ctx context.Context, templateId string, buildId string) error
}
func GetArtifactsRegistryProvider() (ArtifactsRegistry, error) {
var provider = RegistryProvider(env.GetEnv(storageProviderEnv, string(DefaultRegistryProvider)))
setupCtx, setupCtxCancel := context.WithTimeout(context.Background(), 10*time.Second)
defer setupCtxCancel()
switch provider {
case AWSStorageProvider:
return NewAWSArtifactsRegistry(setupCtx)
case GCPStorageProvider:
return NewGCPArtifactsRegistry(setupCtx)
case LocalStorageProvider:
return NewLocalArtifactsRegistry()
}
return nil, fmt.Errorf("unknown artifacts registry provider: %s", provider)
}
sudo mkdir -p /fc-envd
sudo ln -s /kok/todo-api/main4/packages/envd/bin/envd /fc-envd/envd
{"level":"error","timestamp":"2025-06-17T16:25:22.134849023+08:00","message":"failed to create ext4 filesystem","service":"template-manager","internal":true,"pid":2344056,"debug_id":null,"error":"error requesting docker image: error pulling image: Error response from daemon: No such image: 5p0dyt49ab73y1301cfp:f7f675ba-df1b-47df-be33-517d6320da87","stacktrace":"github.com/e2b-dev/infra/packages/shared/pkg/telemetry.ReportCriticalError\n\t/kok/todo-api/main4/packages/shared/pkg/telemetry/tracing.go:80\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/build.(*Rootfs).createExt4Filesystem.func1\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/build/rootfs.go:75\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/build.(*Rootfs).createExt4Filesystem\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/build/rootfs.go:83\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/build.Build\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/build/build.go:39\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/build.(*TemplateBuilder).Build\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/build/template_builder.go:140\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/server.(*ServerStore).TemplateCreate.func1\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/server/create_template.go:81"}
{"level":"info","timestamp":"2025-06-17T16:25:22.135452225+08:00","message":"[2025-06-17T16:25:22+08:00] ...\n","service":"template-manager","internal":false,"pid":2344056,"logger":"template-manager","envID":"5p0dyt49ab73y1301cfp","buildID":"f7f675ba-df1b-47df-be33-517d6320da87"}
{"level":"info","timestamp":"2025-06-17T16:25:22.135653926+08:00","message":"[2025-06-17T16:25:22+08:00] Postprocessing failed: error building environment: error creating rootfs for template '5p0dyt49ab73y1301cfp' during build 'f7f675ba-df1b-47df-be33-517d6320da87': error requesting docker image: error pulling image: Error response from daemon: No such image: 5p0dyt49ab73y1301cfp:f7f675ba-df1b-47df-be33-517d6320da87\n","service":"template-manager","internal":false,"pid":2344056,"logger":"template-manager","envID":"5p0dyt49ab73y1301cfp","buildID":"f7f675ba-df1b-47df-be33-517d6320da87"}
{"level":"error","timestamp":"2025-06-17T16:25:30.136909428+08:00","message":"error while building template","service":"template-manager","internal":true,"pid":2344056,"debug_id":null,"error":"error building environment: error creating rootfs for template '5p0dyt49ab73y1301cfp' during build 'f7f675ba-df1b-47df-be33-517d6320da87': error requesting docker image: error pulling image: Error response from daemon: No such image: 5p0dyt49ab73y1301cfp:f7f675ba-df1b-47df-be33-517d6320da87","stacktrace":"github.com/e2b-dev/infra/packages/shared/pkg/telemetry.ReportCriticalError\n\t/kok/todo-api/main4/packages/shared/pkg/telemetry/tracing.go:80\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/server.(*ServerStore).reportBuildFailed\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/server/create_template.go:105\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/server.(*ServerStore).TemplateCreate.func1\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/server/create_template.go:87"}
步驟 | 狀態 |
---|---|
1️⃣ 建立 TemplateCreate 請求 | ✅ 已完成 |
2️⃣ 建立 build 環境 (RootFS) | 🟡 進行中 |
3️⃣ 嘗試拉 docker image | ❌ 失敗(找不到該 tag) |
4️⃣ 真正進入 build | ❌ 未發生(因為 image 拉不到) |
錯誤訊息 kok/todo-api/main4/packages/shared/pkg/telemetry/tracing.go:80
{"level":"error","timestamp":"2025-06-17T21:27:04.477078842+08:00","message":"error while building template","service":"template-manager","internal":true,"pid":2418839,"debug_id":null,"error":"error provisioning sandbox: error creating sandbox: failed to create FC: error starting fc: error starting fc: [PUT /actions][400] createSyncActionBadRequest &{FaultMessage:Start microvm error: Cannot load kernel due to invalid memory configuration or invalid kernel image: Kernel Loader: failed to load ELF kernel image: Kernel Loader: Unable to read kernel image}","stacktrace":"github.com/e2b-dev/infra/packages/shared/pkg/telemetry.ReportCriticalError\n\t/kok/todo-api/main4/packages/shared/pkg/telemetry/tracing.go:80\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/server.(*ServerStore).reportBuildFailed\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/server/create_template.go:105\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/server.(*ServerStore).TemplateCreate.func1\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/server/create_template.go:87"}
-> Environment built failed
{"level":"error","timestamp":"2025-06-17T23:12:55.767940419+08:00","message":"error while building template","service":"template-manager","internal":true,"pid":11549,"debug_id":null,"error":"error provisioning sandbox: error creating sandbox: failed to create FC: error starting fc: error starting fc: [PUT /actions][400] createSyncActionBadRequest &{FaultMessage:Start microvm error: Cannot load kernel due to invalid memory configuration or invalid kernel image: Kernel Loader: failed to load ELF kernel image: Kernel Loader: Unable to read kernel image}","stacktrace":"github.com/e2b-dev/infra/packages/shared/pkg/telemetry.ReportCriticalError\n\t/kok/todo-api/main4/packages/shared/pkg/telemetry/tracing.go:80\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/server.(*ServerStore).reportBuildFailed\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/server/create_template.go:105\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/server.(*ServerStore).TemplateCreate.func1\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/server/create_template.go:87"}
{"level":"error","timestamp":"2025-06-18T00:52:33.652277231+08:00","message":"error while building template","service":"template-manager","internal":true,"pid":36366,"debug_id":null,"error":"error provisioning sandbox: error creating sandbox: failed to create FC: error starting fc: error starting fc: [PUT /actions][400] createSyncActionBadRequest &{FaultMessage:Start microvm error: Cannot load kernel due to invalid memory configuration or invalid kernel image: Kernel Loader: failed to load ELF kernel image: Kernel Loader: Unable to read kernel image}","stacktrace":"github.com/e2b-dev/infra/packages/shared/pkg/telemetry.ReportCriticalError\n\t/kok/todo-api/main4/packages/shared/pkg/telemetry/tracing.go:80\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/server.(*ServerStore).reportBuildFailed\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/server/create_template.go:107\ngithub.com/e2b-dev/infra/packages/orchestrator/internal/template/server.(*ServerStore).TemplateCreate.func1\n\t/kok/todo-api/main4/packages/orchestrator/internal/template/server/create_template.go:89"}
grep -r ‘func NewBuilder’ /kok/todo-api/main4/packages/orchestrator/internal/template
b.logger.Error(“底層 Build 失敗”, zap.Error(err))