Let's suppose there's a Dockerfile that looks like this:
FROM alpine:3.17
I can use docker to build a docker image like this:
docker build -t example_image .
Resulting image is available for use inside docker. It is visible in:
docker image list
Now, I want to replicate this inside Dagger. I want to build an image so that it is available locally. I don't want to publish my image to docker repository. I have this code in golang:
package main
import (
"context"
"fmt"
"os"
"dagger.io/dagger"
)
func main() {
ctx := context.Background()
client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stdout))
if err != nil {
panic(err)
}
defer client.Close()
out, err := client.Container().
From("alpine:3.17").
Publish(ctx, "example_image")
if err != nil {
panic(err)
}
fmt.Println(out)
}
When I run it, I get:
$ go run build.go
#1 resolve image config for docker.io/library/alpine:3.17
#1 DONE 1.7s
#2 docker-image://docker.io/library/alpine:3.17
#2 resolve docker.io/library/alpine:3.17
#2 resolve docker.io/library/alpine:3.17 0.5s done
#2 DONE 0.5s
#3 exporting to image
#3 exporting layers done
#3 exporting manifest sha256:d6950d19877063d96b772fa5fa9355321f44c97a02549ffcf57831d9a73a5da1 done
#3 exporting config sha256:82834596a05078e7e9b7853d4d30edb038fb7f42591beb933b8c6b24cec307aa done
#3 pushing layers
panic: input:1: container.from.publish failed to solve: failed to push example_image: server message: insufficient_scope: authorization failed
Please visit https://dagger.io/help#go for troubleshooting guidance.
goroutine 1 [running]:
main.main()
/Users/miro/no_cloud_tmp/dagger_test/build.go:25 +0x374
exit status 2
I could not find a solution for this. I looked into Dagger Docs, golang Dagger library, GitHub issues, googled... Does anyone know how to make this work?