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

Method ContainerUpdate

agent/app/service/container.go:635–701  ·  view source on GitHub ↗
(req dto.ContainerOperate)

Source from the content-addressed store, hash-verified

633}
634
635func (u *ContainerService) ContainerUpdate(req dto.ContainerOperate) error {
636 client, err := docker.NewDockerClient()
637 if err != nil {
638 return err
639 }
640 defer client.Close()
641 ctx := context.Background()
642 oldContainer, err := client.ContainerInspect(ctx, req.Name)
643 if err != nil {
644 return err
645 }
646
647 taskItem, err := task.NewTaskWithOps(req.Name, task.TaskUpdate, task.TaskScopeContainer, req.TaskID, 1)
648 if err != nil {
649 global.LOG.Errorf("new task for create container failed, err: %v", err)
650 return err
651 }
652 go func() {
653 taskItem.AddSubTask(i18n.GetWithName("ContainerImagePull", req.Image), func(t *task.Task) error {
654 if !checkImageExist(client, req.Image) || req.ForcePull {
655 if err := pullImages(taskItem, client, req.Image); err != nil {
656 if !req.ForcePull {
657 return err
658 }
659 return fmt.Errorf("pull image %s failed, err: %v", req.Image, err)
660 }
661 }
662 return nil
663 }, nil)
664
665 taskItem.AddSubTask(i18n.GetWithName("ContainerCreate", req.Name), func(t *task.Task) error {
666 err := client.ContainerRemove(ctx, req.Name, container.RemoveOptions{Force: true})
667 taskItem.LogWithStatus(i18n.GetWithName("ContainerRemoveOld", req.Name), err)
668 if err != nil {
669 return err
670 }
671
672 config, hostConf, networkConf, err := loadConfigInfo(false, req, &oldContainer)
673 taskItem.LogWithStatus(i18n.GetMsgByKey("ContainerLoadInfo"), err)
674 if err != nil {
675 taskItem.Log(i18n.GetMsgByKey("ContainerRecreate"))
676 reCreateAfterUpdate(req.Name, client, oldContainer.Config, oldContainer.HostConfig, oldContainer.NetworkSettings)
677 return err
678 }
679 removeUnsupportedEndpointStaticIPAM(client, networkConf, nil)
680
681 con, err := client.ContainerCreate(ctx, config, hostConf, networkConf, &v1.Platform{}, req.Name)
682 if err != nil {
683 taskItem.Log(i18n.GetMsgByKey("ContainerRecreate"))
684 reCreateAfterUpdate(req.Name, client, oldContainer.Config, oldContainer.HostConfig, oldContainer.NetworkSettings)
685 return fmt.Errorf("update container failed, err: %v", err)
686 }
687 err = client.ContainerStart(ctx, con.ID, container.StartOptions{})
688 taskItem.LogWithStatus(i18n.GetMsgByKey("ContainerStartCheck"), err)
689 if err != nil {
690 return fmt.Errorf("update successful but start failed, err: %v", err)
691 }
692 return nil

Callers

nothing calls this directly

Calls 12

checkImageExistFunction · 0.85
pullImagesFunction · 0.85
loadConfigInfoFunction · 0.85
reCreateAfterUpdateFunction · 0.85
CloseMethod · 0.65
ContainerCreateMethod · 0.65
AddSubTaskMethod · 0.45
LogWithStatusMethod · 0.45
LogMethod · 0.45
ExecuteMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected