diff --git a/deploy/Dockerfile_warmer b/deploy/Dockerfile_warmer index 9318e4881b..0ae81ead9b 100644 --- a/deploy/Dockerfile_warmer +++ b/deploy/Dockerfile_warmer @@ -16,16 +16,29 @@ FROM golang:1.12 WORKDIR /go/src/github.com/GoogleContainerTools/kaniko +# Get GCR credential helper +ADD https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v1.5.0/docker-credential-gcr_linux_amd64-1.5.0.tar.gz /usr/local/bin/ +RUN tar -C /usr/local/bin/ -xvzf /usr/local/bin/docker-credential-gcr_linux_amd64-1.5.0.tar.gz +RUN docker-credential-gcr configure-docker +# Get Amazon ECR credential helper +RUN go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login +RUN make -C /go/src/github.com/awslabs/amazon-ecr-credential-helper linux-amd64 + COPY . . RUN make out/warmer FROM scratch COPY --from=0 /go/src/github.com/GoogleContainerTools/kaniko/out/warmer /kaniko/warmer +COPY --from=0 /usr/local/bin/docker-credential-gcr /kaniko/docker-credential-gcr +COPY --from=0 /go/src/github.com/awslabs/amazon-ecr-credential-helper/bin/linux-amd64/docker-credential-ecr-login /kaniko/docker-credential-ecr-login COPY files/ca-certificates.crt /kaniko/ssl/certs/ +COPY --from=0 /root/.docker/config.json /kaniko/.docker/config.json ENV HOME /root ENV USER /root ENV PATH /usr/local/bin:/kaniko ENV SSL_CERT_DIR=/kaniko/ssl/certs ENV DOCKER_CONFIG /kaniko/.docker/ +ENV DOCKER_CREDENTIAL_GCR_CONFIG /kaniko/.config/gcloud/docker_credential_gcr_config.json WORKDIR /workspace +RUN ["docker-credential-gcr", "config", "--token-source=env"] ENTRYPOINT ["/kaniko/warmer"] diff --git a/pkg/cache/warm.go b/pkg/cache/warm.go index c4e6a03fd5..f9f0f22a8b 100644 --- a/pkg/cache/warm.go +++ b/pkg/cache/warm.go @@ -20,10 +20,12 @@ import ( "bytes" "io" "io/ioutil" + "net/http" "os" "path" "github.com/GoogleContainerTools/kaniko/pkg/config" + "github.com/GoogleContainerTools/kaniko/pkg/creds" "github.com/google/go-containerregistry/pkg/name" v1 "github.com/google/go-containerregistry/pkg/v1" "github.com/google/go-containerregistry/pkg/v1/remote" @@ -115,7 +117,8 @@ func (w *Warmer) Warm(image string, opts *config.WarmerOptions) (v1.Hash, error) return v1.Hash{}, errors.Wrapf(err, "Failed to verify image name: %s", image) } - img, err := w.Remote(cacheRef) + rOpts := []remote.Option{remote.WithTransport(http.DefaultTransport.(*http.Transport)), remote.WithAuthFromKeychain(creds.GetKeychain())} + img, err := w.Remote(cacheRef, rOpts...) if err != nil || img == nil { return v1.Hash{}, errors.Wrapf(err, "Failed to retrieve image: %s", image) }