blob: cea9a97bf7ba4c62558db07bd41f40bcea713f52 [file] [edit]
//go:build !no_embedded_containerd
package command
import (
"context"
"path/filepath"
"time"
"github.com/containerd/log"
"github.com/moby/moby/v2/daemon/internal/containerd/server/embedded"
"github.com/pkg/errors"
)
// initEmbeddedContainerd starts containerd inside the daemon process and points
// the containerd clients at it. It is selected by the "embedded-containerd"
// feature.
func (cli *daemonCLI) initEmbeddedContainerd(ctx context.Context) (func(time.Duration) error, error) {
rootDir, err := containerdRootDir(ctx, cli.Config)
if err != nil {
return nil, err
}
log.G(ctx).Warn("Running with experimental embedded-containerd mode")
d, err := embedded.Start(
ctx,
rootDir,
filepath.Join(cli.Config.ExecRoot, "containerd"),
)
if err != nil {
return nil, errors.Wrap(err, "failed to start embedded containerd")
}
cli.Config.ContainerdAddr = d.Address()
cli.containerdDialer = d.Dial
return d.WaitTimeout, nil
}