// newSandbox will create a new sandbox and start it. func newSandbox( command []string, env map[string]string, proxies map[string]http.Handler, image *image.Instance, network *network.Network, c *runtime.TaskContext, e *engine, ) (*sandbox, error) { log := e.Log.WithField("taskId", c.TaskID).WithField("runId", c.RunID) vm, err := vm.NewVirtualMachine( e.engineConfig.MachineOptions, image, network, e.engineConfig.SocketFolder, "", "", log.WithField("component", "vm"), ) if err != nil { return nil, err } // Create sandbox s := &sandbox{ vm: vm, context: c, engine: e, proxies: proxies, log: log, } // Setup meta-data service s.metaService = metaservice.New(command, env, c.LogDrain(), s.result, e.Environment) // Create session manager s.sessions = newSessionManager(s.metaService, s.vm) // Setup network handler s.vm.SetHTTPHandler(http.HandlerFunc(s.handleRequest)) // Start the VM debug("Starting virtual machine") s.vm.Start() // Resolve when VM is closed go s.waitForCrash() return s, nil }