diff --git a/pkg/executor/push.go b/pkg/executor/push.go index 0232abbc56..a99554e98c 100644 --- a/pkg/executor/push.go +++ b/pkg/executor/push.go @@ -66,8 +66,11 @@ const ( // "/kaniko/.docker/config.json". func DockerConfLocation() string { configFile := "config.json" - if dockerConfDir := os.Getenv("DOCKER_CONFIG"); dockerConfDir != "" { - return filepath.Join(dockerConfDir, configFile) + if dockerConfig := os.Getenv("DOCKER_CONFIG"); dockerConfig != "" { + if file, err := os.Stat(dockerConfig); err == nil && file.IsDir() { + return filepath.Join(dockerConfig, configFile) + } + return filepath.Clean(dockerConfig) } return string(os.PathSeparator) + filepath.Join("kaniko", ".docker", configFile) } diff --git a/pkg/executor/push_test.go b/pkg/executor/push_test.go index f7699ce192..3e683bc375 100644 --- a/pkg/executor/push_test.go +++ b/pkg/executor/push_test.go @@ -57,21 +57,33 @@ func TestDockerConfLocation(t *testing.T) { if unset != unsetExpected { t.Errorf("Unexpected default Docker configuration file location: expected:'%s' got:'%s'", unsetExpected, unset) } + tmpDir, err := ioutil.TempDir("", "*") + if err != nil { + t.Fatalf("could not create temp dir: %s", err) + } + defer os.RemoveAll(tmpDir) - if err := os.Setenv(dcfg, "/kaniko/.docker"); err != nil { + dir := filepath.Join(tmpDir, "/kaniko/.docker") + os.MkdirAll(dir, os.ModePerm) + if err := os.Setenv(dcfg, dir); err != nil { t.Fatalf("Failed to set DOCKER_CONFIG: %v", err) } kanikoDefault := DockerConfLocation() - kanikoDefaultExpected := "/kaniko/.docker/config.json" // will fail on Windows + kanikoDefaultExpected := filepath.Join(tmpDir, "/kaniko/.docker/config.json") // will fail on Windows if kanikoDefault != kanikoDefaultExpected { t.Errorf("Unexpected kaniko default Docker conf file location: expected:'%s' got:'%s'", kanikoDefaultExpected, kanikoDefault) } - if err := os.Setenv(dcfg, "/a/different/path"); err != nil { + differentPath, err := ioutil.TempDir("", "differentPath") + if err != nil { + t.Fatalf("could not create temp dir: %s", err) + } + defer os.RemoveAll(differentPath) + if err := os.Setenv(dcfg, differentPath); err != nil { t.Fatalf("Failed to set DOCKER_CONFIG: %v", err) } set := DockerConfLocation() - setExpected := "/a/different/path/config.json" // will fail on Windows + setExpected := filepath.Join(differentPath, "config.json") // will fail on Windows ? if set != setExpected { t.Errorf("Unexpected DOCKER_CONF-based file location: expected:'%s' got:'%s'", setExpected, set) }