Load the engine container into a Docker engine +cache="session"
( ctx context.Context, docker *dagger.Socket, // +optional // +default="localhost/dagger-engine.dev:latest" name string, // +optional platform dagger.Platform, // Enable experimental GPU support // +optional gpuSupport bool, )
| 14 | // Load the engine container into a Docker engine |
| 15 | // +cache="session" |
| 16 | func (dev *EngineDev) LoadToDocker( |
| 17 | ctx context.Context, |
| 18 | |
| 19 | docker *dagger.Socket, |
| 20 | |
| 21 | // +optional |
| 22 | // +default="localhost/dagger-engine.dev:latest" |
| 23 | name string, |
| 24 | |
| 25 | // +optional |
| 26 | platform dagger.Platform, |
| 27 | |
| 28 | // Enable experimental GPU support |
| 29 | // +optional |
| 30 | gpuSupport bool, |
| 31 | ) (*LoadedEngine, error) { |
| 32 | ctr, err := dev.Container(ctx, platform, gpuSupport, "", "") |
| 33 | if err != nil { |
| 34 | return nil, err |
| 35 | } |
| 36 | tar := ctr.AsTarball(dagger.ContainerAsTarballOpts{ |
| 37 | // use gzip to avoid incompatibility w/ older docker versions |
| 38 | ForcedCompression: dagger.ImageLayerCompressionGzip, |
| 39 | }) |
| 40 | |
| 41 | loader := dag.Container(). |
| 42 | From("docker:cli"). |
| 43 | WithUnixSocket("/var/run/docker.sock", docker). |
| 44 | WithMountedFile("/image.tar.gz", tar). |
| 45 | WithEnvVariable("CACHEBUSTER", rand.Text()) |
| 46 | |
| 47 | stdout, err := loader. |
| 48 | WithExec([]string{"docker", "load", "-i", "/image.tar.gz"}). |
| 49 | Stdout(ctx) |
| 50 | if err != nil { |
| 51 | return nil, fmt.Errorf("docker load failed: %w", err) |
| 52 | } |
| 53 | |
| 54 | _, imageID, ok := strings.Cut(stdout, "Loaded image ID: sha256:") |
| 55 | if !ok { |
| 56 | _, imageID, ok = strings.Cut(stdout, "Loaded image: sha256:") // podman |
| 57 | if !ok { |
| 58 | return nil, fmt.Errorf("unexpected output from docker load") |
| 59 | } |
| 60 | } |
| 61 | imageID = strings.TrimSpace(imageID) |
| 62 | |
| 63 | _, err = loader. |
| 64 | WithExec([]string{"docker", "tag", imageID, name}). |
| 65 | Sync(ctx) |
| 66 | if err != nil { |
| 67 | return nil, fmt.Errorf("docker tag failed: %w", err) |
| 68 | } |
| 69 | |
| 70 | return &LoadedEngine{ |
| 71 | Loader: loader, |
| 72 | Image: name, |
| 73 | GPUSupport: gpuSupport, |
no test coverage detected