Use DOCKER_CONFIG for docker config location

If the DOCKER_CONFIG environment variable is set, use it when
determining if the Docker config file exists.  Fall back to kaniko
default if it the DOCKER_CONFIG environment variable is not set.

Fixes #1228
This commit is contained in:
David Dooling 2020-05-04 16:46:50 -05:00
parent d8c786c777
commit 0871dfd6ab
No known key found for this signature in database
GPG Key ID: 9558581EBB90A121
2 changed files with 13 additions and 4 deletions

View File

@ -53,9 +53,18 @@ type withUserAgent struct {
const (
UpstreamClientUaKey = "UPSTREAM_CLIENT_TYPE"
DockerConfLocation = "/kaniko/.docker/config.json"
)
// DockerConfLocation returns the file system location of the Docker configuration
// from the DOCKER_CONFIG environment variable. If that variable is not set, it
// returns "/kaniko/.docker/config.json".
func DockerConfLocation() string {
if dockerConfLocation := os.Getenv("DOCKER_CONFIG"); dockerConfLocation != "" {
return dockerConfLocation
}
return "/kaniko/.docker/config.json"
}
func (w *withUserAgent) RoundTrip(r *http.Request) (*http.Response, error) {
ua := []string{fmt.Sprintf("kaniko/%s", version.Version())}
if upstream := os.Getenv(UpstreamClientUaKey); upstream != "" {
@ -130,7 +139,7 @@ func CheckPushPermissions(opts *config.KanikoOptions) error {
if strings.Contains(destRef.RegistryStr(), "gcr.io") {
// Checking for existence of docker.config as it's normally required for
// authenticated registries and prevent overwriting user provided docker conf
if _, err := fs.Stat(DockerConfLocation); os.IsNotExist(err) {
if _, err := fs.Stat(DockerConfLocation()); os.IsNotExist(err) {
if err := execCommand("docker-credential-gcr", "configure-docker").Run(); err != nil {
return errors.Wrap(err, "error while configuring docker-credential-gcr helper")
}

View File

@ -354,8 +354,8 @@ func TestCheckPushPermissions(t *testing.T) {
Destinations: []string{test.Destination},
}
if test.ExistingConfig {
afero.WriteFile(fs, DockerConfLocation, []byte(""), os.FileMode(0644))
defer fs.Remove(DockerConfLocation)
afero.WriteFile(fs, DockerConfLocation(), []byte(""), os.FileMode(0644))
defer fs.Remove(DockerConfLocation())
}
CheckPushPermissions(&opts)
if test.ShouldCallExecCommand != calledExecCommand {