@@ -111,6 +111,11 @@ object DockerPlugin extends AutoPlugin {
111111 dockerVersion := Try (Process (dockerExecCommand.value ++ Seq (" version" , " --format" , " '{{.Server.Version}}'" )).!! ).toOption
112112 .map(_.trim)
113113 .flatMap(DockerVersion .parse),
114+ dockerApiVersion := Try (
115+ Process (dockerExecCommand.value ++ Seq (" version" , " --format" , " '{{.Server.APIVersion}}'" )).!!
116+ ).toOption
117+ .map(_.trim)
118+ .flatMap(DockerApiVersion .parse),
114119 dockerBuildOptions := Seq (" --force-rm" ) ++ dockerAliases.value.flatMap { alias =>
115120 Seq (" -t" , alias.toString)
116121 },
@@ -243,8 +248,8 @@ object DockerPlugin extends AutoPlugin {
243248 nonEmptyMappings((mappings in Docker ).value),
244249 filesExist((mappings in Docker ).value),
245250 validateExposedPorts(dockerExposedPorts.value, dockerExposedUdpPorts.value),
246- validateDockerVersion(dockerVersion .value),
247- validateDockerPermissionStrategy(dockerPermissionStrategy.value, dockerVersion.value)
251+ validateDockerVersion(dockerApiVersion .value),
252+ validateDockerPermissionStrategy(dockerPermissionStrategy.value, dockerVersion.value, dockerApiVersion.value )
248253 ),
249254 dockerPackageMappings := MappingsHelper .contentOf(sourceDirectory.value),
250255 dockerGenerateConfig := {
@@ -638,8 +643,8 @@ object DockerPlugin extends AutoPlugin {
638643 }
639644 }
640645
641- private [this ] def validateDockerVersion (dockerVersion : Option [DockerVersion ]): Validation .Validator = () => {
642- dockerVersion match {
646+ private [this ] def validateDockerVersion (dockerApiVersion : Option [DockerApiVersion ]): Validation .Validator = () => {
647+ dockerApiVersion match {
643648 case Some (_) => List .empty
644649 case None =>
645650 List (
@@ -649,7 +654,7 @@ object DockerPlugin extends AutoPlugin {
649654 howToFix = """ |sbt-native packager tries to parse the `docker version` output. This can fail if
650655 |
651656 | - the output has changed:
652- | $ docker version --format '{{.Server.Version }}'
657+ | $ docker version --format '{{.Server.APIVersion }}'
653658 |
654659 | - no `docker` executable is available
655660 | $ which docker
@@ -658,52 +663,53 @@ object DockerPlugin extends AutoPlugin {
658663 |
659664 |You can display the parsed docker version in the sbt console with:
660665 |
661- | sbt:your-project> show dockerVersion
666+ | sbt:your-project> show dockerApiVersion
662667 |
663668 |As a last resort you could hard code the docker version, but it's not recommended!!
664669 |
665- | import com.typesafe.sbt.packager.docker.DockerVersion
666- | dockerVersion := Some(DockerVersion(18, 9, 0, Some("ce" ))
670+ | import com.typesafe.sbt.packager.docker.DockerApiVersion
671+ | dockerApiVersion := Some(DockerApiVersion(1, 40 ))
667672 """ .stripMargin
668673 )
669674 )
670675 }
671676 }
672677
673678 private [this ] def validateDockerPermissionStrategy (strategy : DockerPermissionStrategy ,
674- dockerVersion : Option [DockerVersion ]): Validation .Validator =
679+ dockerVersion : Option [DockerVersion ],
680+ dockerApiVersion : Option [DockerApiVersion ]): Validation .Validator =
675681 () => {
676- (strategy, dockerVersion) match {
677- case (DockerPermissionStrategy .MultiStage , Some (ver)) if ! DockerSupport .multiStage(ver) =>
682+ (strategy, dockerVersion, dockerApiVersion ) match {
683+ case (DockerPermissionStrategy .MultiStage , Some (ver), Some (apiVer)) if ! DockerSupport .multiStage(ver, apiVer ) =>
678684 List (
679685 ValidationError (
680686 description =
681687 s " The detected Docker version $ver is not compatible with DockerPermissionStrategy.MultiStage " ,
682688 howToFix =
683689 """ |sbt-native packager tries to parse the `docker version` output.
684- |To use multi-stage build, upgrade your Docker, pick another strategy, or override dockerVersion :
690+ |To use multi-stage build, upgrade your Docker, pick another strategy, or override dockerApiVersion :
685691 |
686692 | import com.typesafe.sbt.packager.docker.DockerPermissionStrategy
687693 | dockerPermissionStrategy := DockerPermissionStrategy.Run
688694 |
689- | import com.typesafe.sbt.packager.docker.DockerVersion
690- | dockerVersion := Some(DockerVersion(18, 9, 0, Some("ce" ))
695+ | import com.typesafe.sbt.packager.docker.DockerApiVersion
696+ | dockerApiVersion := Some(DockerApiVersion(1, 40 ))
691697 """ .stripMargin
692698 )
693699 )
694- case (DockerPermissionStrategy .CopyChown , Some (ver)) if ! DockerSupport .chownFlag(ver) =>
700+ case (DockerPermissionStrategy .CopyChown , Some (ver), Some (apiVer)) if ! DockerSupport .chownFlag(ver, apiVer ) =>
695701 List (
696702 ValidationError (
697703 description =
698704 s " The detected Docker version $ver is not compatible with DockerPermissionStrategy.CopyChown " ,
699705 howToFix = """ |sbt-native packager tries to parse the `docker version` output.
700- |To use --chown flag, upgrade your Docker, pick another strategy, or override dockerVersion :
706+ |To use --chown flag, upgrade your Docker, pick another strategy, or override dockerApiVersion :
701707 |
702708 | import com.typesafe.sbt.packager.docker.DockerPermissionStrategy
703709 | dockerPermissionStrategy := DockerPermissionStrategy.Run
704710 |
705- | import com.typesafe.sbt.packager.docker.DockerVersion
706- | dockerVersion := Some(DockerVersion(18, 9, 0, Some("ce" ))
711+ | import com.typesafe.sbt.packager.docker.DockerApiVersion
712+ | dockerApiVersion := Some(DockerApiVersion(1, 40 ))
707713 """ .stripMargin
708714 )
709715 )
0 commit comments