diff --git a/plugins/common/docker.go b/plugins/common/docker.go index 492240f3c..ef759affc 100644 --- a/plugins/common/docker.go +++ b/plugins/common/docker.go @@ -66,10 +66,10 @@ func CopyFromImage(appName string, image string, source string, destination stri workDir := "" if !IsAbsPath(source) { - if IsImageHerokuishBased(image, appName) { - workDir = "/app" - } else if IsImageCnbBased(image) { + if IsImageCnbBased(image) { workDir = "/workspace" + } else if IsImageHerokuishBased(image, appName) { + workDir = "/app" } else { workDir, _ = DockerInspect(image, "{{.Config.WorkingDir}}") } @@ -259,6 +259,19 @@ func DockerInspect(containerOrImageID, format string) (output string, err error) return } +// IsImageCnbBased returns true if app image is based on cnb +func IsImageCnbBased(image string) bool { + if len(image) == 0 { + return false + } + + output, err := DockerInspect(image, "{{index .Config.Labels \"io.buildpacks.stack.id\" }}") + if err != nil { + return false + } + return output != "" +} + // IsImageHerokuishBased returns true if app image is based on herokuish func IsImageHerokuishBased(image string, appName string) bool { output, err := DockerInspect(image, "{{range .Config.Env}}{{if eq . \"USER=herokuishuser\" }}{{println .}}{{end}}{{end}}") diff --git a/plugins/common/functions b/plugins/common/functions index 7fbd0b396..93002186a 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -477,10 +477,10 @@ copy_from_image() { if verify_image "$IMAGE"; then if ! is_abs_path "$SRC_FILE"; then - if is_image_herokuish_based "$IMAGE" "$APP"; then - WORKDIR="/app" - elif is_image_cnb_based "$IMAGE"; then + if is_image_cnb_based "$IMAGE"; then WORKDIR="/workspace" + elif is_image_herokuish_based "$IMAGE" "$APP"; then + WORKDIR="/app" else WORKDIR="$("$DOCKER_BIN" image inspect --format '{{.Config.WorkingDir}}' "$IMAGE")" fi