diff options
author | lewo <lewo@abesis.fr> | 2020-01-30 21:10:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-30 21:10:52 +0100 |
commit | 86f8732194f20c7073ee05a980abf87376071a83 (patch) | |
tree | ff5789ac33fa8c26b941cf90183a3a3619ddba17 | |
parent | 40be1827ee6fa0fbd1c73e9e97f6b338ca4df421 (diff) | |
parent | 01a68479cc08d4f937a93c27f8f36e701e4bd435 (diff) | |
download | nixpkgs-86f8732194f20c7073ee05a980abf87376071a83.tar nixpkgs-86f8732194f20c7073ee05a980abf87376071a83.tar.gz nixpkgs-86f8732194f20c7073ee05a980abf87376071a83.tar.bz2 nixpkgs-86f8732194f20c7073ee05a980abf87376071a83.tar.lz nixpkgs-86f8732194f20c7073ee05a980abf87376071a83.tar.xz nixpkgs-86f8732194f20c7073ee05a980abf87376071a83.tar.zst nixpkgs-86f8732194f20c7073ee05a980abf87376071a83.zip |
Merge pull request #78834 from nlewo/fix-two-layers-image
Fix dockerTools.buildLayerImage with 2 layers
-rw-r--r-- | nixos/tests/docker-tools.nix | 3 | ||||
-rw-r--r-- | pkgs/build-support/docker/default.nix | 8 | ||||
-rw-r--r-- | pkgs/build-support/docker/examples.nix | 8 |
3 files changed, 17 insertions, 2 deletions
diff --git a/nixos/tests/docker-tools.nix b/nixos/tests/docker-tools.nix index 9ab1a71f331..07fac533680 100644 --- a/nixos/tests/docker-tools.nix +++ b/nixos/tests/docker-tools.nix @@ -80,5 +80,8 @@ import ./make-test.nix ({ pkgs, ... }: { # This is to be sure the order of layers of the parent image is preserved $docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layersOrder.imageName} cat /tmp/layer2 | grep -q layer2"); $docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layersOrder.imageName} cat /tmp/layer3 | grep -q layer3"); + + # Ensure image with only 2 layers can be loaded + $docker->succeed("docker load --input='${pkgs.dockerTools.examples.two-layered-image}'"); ''; }) diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix index 3fcae13e20d..509b7e2a7e1 100644 --- a/pkgs/build-support/docker/default.nix +++ b/pkgs/build-support/docker/default.nix @@ -315,7 +315,7 @@ rec { runCommand "${name}-granular-docker-layers" { inherit maxLayers; paths = referencesByPopularity overallClosure; - nativeBuildInputs = [ jshon rsync tarsum ]; + nativeBuildInputs = [ jshon rsync tarsum moreutils ]; enableParallelBuilding = true; } '' @@ -335,7 +335,8 @@ rec { cat $paths ${lib.concatMapStringsSep " " (path: "| grep -v ${path}") (closures ++ [ overallClosure ])} } - paths | head -n $((maxLayers - 1)) | cat -n | xargs -P$NIX_BUILD_CORES -n2 ${storePathToLayer} + # We need to sponge to avoid grep broken pipe error when maxLayers == 1 + paths | sponge | head -n $((maxLayers - 1)) | cat -n | xargs -r -P$NIX_BUILD_CORES -n2 ${storePathToLayer} if [ $(paths | wc -l) -ge $maxLayers ]; then paths | tail -n+$maxLayers | xargs ${storePathToLayer} $maxLayers fi @@ -544,6 +545,9 @@ rec { # believe the actual maximum is 128. maxLayers ? 100 }: + assert + (lib.assertMsg (maxLayers > 1) + "the maxLayers argument of dockerTools.buildLayeredImage function must be greather than 1 (current value: ${toString maxLayers})"); let baseName = baseNameOf name; contentsEnv = symlinkJoin { diff --git a/pkgs/build-support/docker/examples.nix b/pkgs/build-support/docker/examples.nix index d7d1a693310..a1f71d35793 100644 --- a/pkgs/build-support/docker/examples.nix +++ b/pkgs/build-support/docker/examples.nix @@ -238,4 +238,12 @@ rec { config.Cmd = [ "${pkgs.hello}/bin/hello" ]; }; + # 15. Create a layered image with only 2 layers + two-layered-image = pkgs.dockerTools.buildLayeredImage { + name = "two-layered-image"; + tag = "latest"; + config.Cmd = [ "${pkgs.hello}/bin/hello" ]; + contents = [ pkgs.bash pkgs.hello ]; + maxLayers = 2; + }; } |