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

Method ContainerUpgrade

agent/app/service/container.go:703–770  ·  view source on GitHub ↗
(req dto.ContainerUpgrade)

Source from the content-addressed store, hash-verified

701}
702
703func (u *ContainerService) ContainerUpgrade(req dto.ContainerUpgrade) error {
704 client, err := docker.NewDockerClient()
705 if err != nil {
706 return err
707 }
708 defer client.Close()
709 ctx := context.Background()
710 taskItem, err := task.NewTaskWithOps(req.Image, task.TaskUpgrade, task.TaskScopeImage, req.TaskID, 1)
711 if err != nil {
712 global.LOG.Errorf("new task for create container failed, err: %v", err)
713 return err
714 }
715 go func() {
716 taskItem.AddSubTask(i18n.GetWithName("ContainerImagePull", req.Image), func(t *task.Task) error {
717 taskItem.LogStart(i18n.GetWithName("ContainerImagePull", req.Image))
718 if !checkImageExist(client, req.Image) || req.ForcePull {
719 if err := pullImages(taskItem, client, req.Image); err != nil {
720 if !req.ForcePull {
721 return err
722 }
723 return fmt.Errorf("pull image %s failed, err: %v", req.Image, err)
724 }
725 }
726 return nil
727 }, nil)
728 for _, item := range req.Names {
729 var oldContainer container.InspectResponse
730 taskItem.AddSubTask(i18n.GetWithName("ContainerLoadInfo", item), func(t *task.Task) error {
731 taskItem.Logf("----------------- %s -----------------", item)
732 oldContainer, err = client.ContainerInspect(ctx, item)
733 if err != nil {
734 return err
735 }
736 return nil
737 }, nil)
738
739 taskItem.AddSubTask(i18n.GetWithName("ContainerCreate", item), func(t *task.Task) error {
740 config := oldContainer.Config
741 config.Image = req.Image
742 hostConf := oldContainer.HostConfig
743 err := client.ContainerRemove(ctx, item, container.RemoveOptions{Force: true})
744 taskItem.LogWithStatus(i18n.GetWithName("ContainerRemoveOld", item), err)
745 if err != nil {
746 return err
747 }
748
749 con, err := createContainerWithOldNetworks(ctx, client, config, hostConf, oldContainer.NetworkSettings, item)
750 if err != nil {
751 taskItem.Log(i18n.GetMsgByKey("ContainerRecreate"))
752 reCreateAfterUpdate(item, client, oldContainer.Config, oldContainer.HostConfig, oldContainer.NetworkSettings)
753 return fmt.Errorf("upgrade container failed, err: %v", err)
754 }
755 err = client.ContainerStart(ctx, con.ID, container.StartOptions{})
756 taskItem.LogWithStatus(i18n.GetMsgByKey("ContainerStartCheck"), err)
757 if err != nil {
758 return fmt.Errorf("upgrade successful but start failed, err: %v", err)
759 }
760 return nil

Callers

nothing calls this directly

Calls 12

checkImageExistFunction · 0.85
pullImagesFunction · 0.85
reCreateAfterUpdateFunction · 0.85
CloseMethod · 0.65
AddSubTaskMethod · 0.45
LogStartMethod · 0.45
LogfMethod · 0.45
LogWithStatusMethod · 0.45
LogMethod · 0.45
ExecuteMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected