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

Method ContainerCreate

agent/app/service/container.go:481–556  ·  view source on GitHub ↗
(req dto.ContainerOperate, inThread bool)

Source from the content-addressed store, hash-verified

479}
480
481func (u *ContainerService) ContainerCreate(req dto.ContainerOperate, inThread bool) error {
482 client, err := docker.NewDockerClient()
483 if err != nil {
484 return err
485 }
486 defer client.Close()
487 ctx := context.Background()
488 newContainer, _ := client.ContainerInspect(ctx, req.Name)
489 if newContainer.ContainerJSONBase != nil {
490 return buserr.New("ErrContainerName")
491 }
492
493 taskItem, err := task.NewTaskWithOps(req.Name, task.TaskCreate, task.TaskScopeContainer, req.TaskID, 1)
494 if err != nil {
495 global.LOG.Errorf("new task for create container failed, err: %v", err)
496 return err
497 }
498
499 taskItem.AddSubTask(i18n.GetWithName("ContainerImagePull", req.Image), func(t *task.Task) error {
500 if !checkImageExist(client, req.Image) || req.ForcePull {
501 if err := pullImages(taskItem, client, req.Image); err != nil {
502 if !req.ForcePull {
503 return err
504 }
505 }
506 }
507 return nil
508 }, nil)
509
510 taskItem.AddSubTask(i18n.GetMsgByKey("ContainerImageCheck"), func(t *task.Task) error {
511 imageInfo, _, err := client.ImageInspectWithRaw(ctx, req.Image)
512 if err != nil {
513 return err
514 }
515 if len(req.Entrypoint) == 0 {
516 req.Entrypoint = imageInfo.Config.Entrypoint
517 }
518 if len(req.Cmd) == 0 {
519 req.Cmd = imageInfo.Config.Cmd
520 }
521 return nil
522 }, nil)
523
524 taskItem.AddSubTask(i18n.GetWithName("ContainerCreate", req.Name), func(t *task.Task) error {
525 config, hostConf, networkConf, err := loadConfigInfo(true, req, nil)
526 taskItem.LogWithStatus(i18n.GetMsgByKey("ContainerLoadInfo"), err)
527 if err != nil {
528 return err
529 }
530 removeUnsupportedEndpointStaticIPAM(client, networkConf, nil)
531 con, err := client.ContainerCreate(ctx, config, hostConf, networkConf, &v1.Platform{}, req.Name)
532 if err != nil {
533 taskItem.Log(i18n.GetMsgByKey("ContainerCreateFailed"))
534 _ = client.ContainerRemove(ctx, req.Name, container.RemoveOptions{RemoveVolumes: true, Force: true})
535 return err
536 }
537 err = client.ContainerStart(ctx, con.ID, container.StartOptions{})
538 taskItem.LogWithStatus(i18n.GetMsgByKey("ContainerStartCheck"), err)

Callers

nothing calls this directly

Calls 11

checkImageExistFunction · 0.85
pullImagesFunction · 0.85
loadConfigInfoFunction · 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