package daemon import ( "context" "fmt" "github.com/moby/moby/v2/daemon/config" "github.com/moby/moby/v2/daemon/container" "github.com/moby/moby/v2/daemon/internal/libcontainerd/types" "github.com/moby/moby/v2/daemon/pkg/oci" "github.com/moby/moby/v2/errdefs" "github.com/opencontainers/runtime-spec/specs-go" ) // initializeCreatedTask performs any initialization that needs to be done to // prepare a freshly-created task to be started. func (daemon *Daemon) initializeCreatedTask( ctx context.Context, cfg *config.Config, tsk types.Task, ctr *container.Container, spec *specs.Spec, ) error { if ctr.Config.NetworkDisabled { return nil } nspath, ok := oci.NamespacePath(spec, specs.NetworkNamespace) if ok && nspath == "" { // the runtime has been instructed to create a new network namespace for tsk. sb, err := daemon.netController.GetSandbox(ctr.ID) if err != nil { return errdefs.System(err) } if err := sb.SetKey(ctx, fmt.Sprintf("/proc/%d/ns/net", tsk.Pid())); err != nil { return errdefs.System(err) } } if err := daemon.allocateNetwork(ctx, cfg, ctr); err != nil { return fmt.Errorf("%s: %w", errSetupNetworking, err) } return nil }