Skip to content

API /build doesn't pass AuthConfig to BuildKit #48112

@dantdj

Description

@dantdj

Description

Hey folks - apologies if this is the wrong place, but this is the repository that the docs on go.dev linked me to.

I'm trying to use the Go SDK to run an image build, but run into issues when calling ImageBuild. When using a Dockerfile that specifies a base image in a private Artifactory instance, it immediately fails with this message: failed to resolve source metadata for <imageName>: no active sessions on the line containing the FROM statement.

Strangely, I am able to run ImagePull to pull those base images down beforehand just fine, and if I do so then ImageBuild works for as long as the images are present on the machine. However, this isn't a complete solution because I don't know what base images are present in the Dockerfile before I do the build (I can parse it, sure, but I'd rather avoid doing so if possible).

I haven't had much luck in figuring out what's going on here - my searches have suggested it's due to a lack of authentication, but I can pull down the images using ImagePull just fine without authentication. Regardless, I did try adding in an AuthConfig value to the ImageBuildOptions struct, but without any luck. I've included an example of how I'm constructing all this in the code in the "Reproduce" section.

The problem does not occur if I use a public base image (e.g mcr.microsoft.com/dotnet/aspnet:8.0) - it's only when I use my private repository.

The Docker package I pull into my application is github.com/docker/docker, version is v27.0.2+incompatible

Reproduce

dockerClient, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())

tar, err := archive.TarWithOptions(directory, &archive.TarOptions{})

opts := types.ImageBuildOptions{
		SuppressOutput: false,
		PullParent:     true,
		Dockerfile:     "Dockerfile",
		Tags:           []string{imageTag},
		Version:        types.BuilderBuildKit,
		Platform: "linux/amd64",
		AuthConfigs: map[string]registry.AuthConfig{
			"<repoUrl>": {
				Username:      user, // Artifactory username, should be ignored if I understand right
				Password:      pass, // Artifactory API token
				ServerAddress: "https://<repoUrl>",
			},
		},
	}

response, err := dockerClient.ImageBuild(context.TODO(), tar, opts)

Expected behavior

The Docker SDK should build the image without requiring the base images to be pulled down already.

docker version

Client:
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:29:54 2024
 OS/Arch:           windows/amd64
 Context:           desktop-linux

Server: Docker Desktop 4.31.1 (153621)
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:29:22 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker info

Client:
 Version:    26.1.4
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.14.1-desktop.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-buildx.exe
  compose: Docker Compose (Docker Inc.)
    Version:  v2.27.1-desktop.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-compose.exe
  debug: Get a shell into any image or container (Docker Inc.)
    Version:  0.0.32
    Path:     C:\Program Files\Docker\cli-plugins\docker-debug.exe
  dev: Docker Dev Environments (Docker Inc.)
    Version:  v0.1.2
    Path:     C:\Program Files\Docker\cli-plugins\docker-dev.exe
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.24
    Path:     C:\Program Files\Docker\cli-plugins\docker-extension.exe
  feedback: Provide feedback, right in your terminal! (Docker Inc.)
    Version:  v1.0.5
    Path:     C:\Program Files\Docker\cli-plugins\docker-feedback.exe
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v1.2.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-init.exe
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
    Version:  0.6.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-sbom.exe
  scout: Docker Scout (Docker Inc.)
    Version:  v1.9.3
    Path:     C:\Program Files\Docker\cli-plugins\docker-scout.exe

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 5
 Server Version: 26.1.4
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: d2d58213f83a351ca8f528a95fbd145f5654e957
 runc version: v1.1.12-0-g51d5e94
 init version: de40ad0
 Security Options:
  seccomp
   Profile: unconfined
 Kernel Version: 5.15.133.1-microsoft-standard-WSL2
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 24
 Total Memory: 31.19GiB
 Name: docker-desktop
 ID: 5b0b02f0-a10f-4504-94c3-bb1770571649
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Labels:
  com.docker.desktop.address=npipe://\\.\pipe\docker_cli
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
WARNING: daemon is not using the default seccomp profile

Additional Info

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions