MCPcopy Create free account
hub / github.com/1Panel-dev/1Panel / ImagePush

Method ImagePush

agent/app/service/image.go:444–497  ·  view source on GitHub ↗
(req dto.ImagePush)

Source from the content-addressed store, hash-verified

442}
443
444func (u *ImageService) ImagePush(req dto.ImagePush) error {
445 client, err := docker.NewDockerClient()
446 if err != nil {
447 return err
448 }
449 defer client.Close()
450
451 taskItem, err := task.NewTaskWithOps(req.Name, task.TaskPush, task.TaskScopeImage, req.TaskID, 1)
452 if err != nil {
453 return fmt.Errorf("new task for image push failed, err: %v", err)
454 }
455
456 go func() {
457 options := image.PushOptions{All: true}
458 var imageRepo model.ImageRepo
459 newName := ""
460 taskItem.AddSubTask(i18n.GetMsgByKey("ImagePush"), func(t *task.Task) error {
461 imageRepo, err = imageRepoRepo.Get(repo.WithByID(req.RepoID))
462 newName = fmt.Sprintf("%s/%s", imageRepo.DownloadUrl, req.Name)
463 taskItem.LogWithStatus(i18n.GetMsgByKey("ImageRepoAuthFromDB"), err)
464 if err != nil {
465 return err
466 }
467 options = image.PushOptions{All: true}
468 authConfig := registry.AuthConfig{
469 Username: imageRepo.Username,
470 Password: imageRepo.Password,
471 }
472 encodedJSON, _ := json.Marshal(authConfig)
473 authStr := base64.URLEncoding.EncodeToString(encodedJSON)
474 options.RegistryAuth = authStr
475 return nil
476 }, nil)
477 taskItem.AddSubTask(i18n.GetMsgByKey("ImageRenameTag"), func(t *task.Task) error {
478 taskItem.Log(i18n.GetWithName("ImageNewTag", newName))
479 if newName != req.TagName {
480 if err := client.ImageTag(context.TODO(), req.TagName, newName); err != nil {
481 return err
482 }
483 }
484 return nil
485 }, nil)
486 taskItem.AddSubTask(i18n.GetMsgByKey("TaskPush"), func(t *task.Task) error {
487 dockerCli := docker.NewClientWithExist(client)
488 if err := dockerCli.PushImageWithProcessAndOptions(taskItem, newName, options); err != nil {
489 return err
490 }
491 return nil
492 }, nil)
493 _ = taskItem.Execute()
494 }()
495
496 return nil
497}
498
499func (u *ImageService) ImageRemove(req dto.BatchDelete) error {
500 client, err := docker.NewDockerClient()

Callers

nothing calls this directly

Calls 9

CloseMethod · 0.65
GetMethod · 0.65
WithByIDMethod · 0.65
ImageTagMethod · 0.65
AddSubTaskMethod · 0.45
LogWithStatusMethod · 0.45
LogMethod · 0.45
ExecuteMethod · 0.45

Tested by

no test coverage detected