diff --git a/backend/app/service/container.go b/backend/app/service/container.go index 3775f131b..f17e67cbd 100644 --- a/backend/app/service/container.go +++ b/backend/app/service/container.go @@ -2,6 +2,7 @@ package service import ( "context" + "encoding/base64" "encoding/json" "fmt" "io" @@ -26,6 +27,7 @@ import ( "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/registry" "github.com/docker/docker/client" "github.com/docker/go-connections/nat" "github.com/gorilla/websocket" @@ -805,7 +807,25 @@ func checkImageExist(client *client.Client, image string) bool { } func pullImages(ctx context.Context, client *client.Client, image string) error { - out, err := client.ImagePull(ctx, image, types.ImagePullOptions{}) + options := types.ImagePullOptions{} + repos, _ := imageRepoRepo.List() + if len(repos) != 0 { + for _, repo := range repos { + if strings.HasPrefix(image, repo.DownloadUrl) && repo.Auth { + authConfig := registry.AuthConfig{ + Username: repo.Username, + Password: repo.Password, + } + encodedJSON, err := json.Marshal(authConfig) + if err != nil { + return err + } + authStr := base64.URLEncoding.EncodeToString(encodedJSON) + options.RegistryAuth = authStr + } + } + } + out, err := client.ImagePull(ctx, image, options) if err != nil { return err }