summary refs log tree commit diff
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2021-10-18 12:39:51 +0200
committerRobert Hensing <robert@roberthensing.nl>2021-10-18 12:41:51 +0200
commit3b9d05e114550db6ea23befa078bd978371d863c (patch)
treea20746d84a3b76268f7b38018b60e42b9535baa2
parentc7fd252d324f6eb4eeb9a769d1533cb4ede361ad (diff)
downloadnixpkgs-3b9d05e114550db6ea23befa078bd978371d863c.tar
nixpkgs-3b9d05e114550db6ea23befa078bd978371d863c.tar.gz
nixpkgs-3b9d05e114550db6ea23befa078bd978371d863c.tar.bz2
nixpkgs-3b9d05e114550db6ea23befa078bd978371d863c.tar.lz
nixpkgs-3b9d05e114550db6ea23befa078bd978371d863c.tar.xz
nixpkgs-3b9d05e114550db6ea23befa078bd978371d863c.tar.zst
nixpkgs-3b9d05e114550db6ea23befa078bd978371d863c.zip
dockerTools: Fix and test #118722 path in contents
-rw-r--r--nixos/tests/docker-tools.nix13
-rw-r--r--pkgs/build-support/docker/default.nix7
-rw-r--r--pkgs/build-support/docker/examples.nix12
3 files changed, 31 insertions, 1 deletions
diff --git a/nixos/tests/docker-tools.nix b/nixos/tests/docker-tools.nix
index e482223436f..7110187e8d7 100644
--- a/nixos/tests/docker-tools.nix
+++ b/nixos/tests/docker-tools.nix
@@ -383,5 +383,18 @@ import ./make-test-python.nix ({ pkgs, ... }: {
         docker.succeed(
             "tar -tf ${examples.exportBash} | grep '\./bin/bash' > /dev/null"
         )
+
+    with subtest("Ensure bare paths in contents are loaded correctly"):
+        docker.succeed(
+            "docker load --input='${examples.build-image-with-path}'",
+            "docker run --rm build-image-with-path bash -c '[[ -e /hello.txt ]]'",
+            "docker rmi build-image-with-path",
+        )
+        docker.succeed(
+            "${examples.layered-image-with-path} | docker load",
+            "docker run --rm layered-image-with-path bash -c '[[ -e /hello.txt ]]'",
+            "docker rmi layered-image-with-path",
+        )
+
   '';
 })
diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix
index 47fd99c12f8..a42b025bc7f 100644
--- a/pkgs/build-support/docker/default.nix
+++ b/pkgs/build-support/docker/default.nix
@@ -37,6 +37,11 @@
 
 let
 
+  inherit (lib)
+    escapeShellArgs
+    toList
+    ;
+
   mkDbExtraCommand = contents:
     let
       contentsList = if builtins.isList contents then contents else [ contents ];
@@ -402,7 +407,7 @@ rec {
 
       preMount = lib.optionalString (contents != null && contents != [ ]) ''
         echo "Adding contents..."
-        for item in ${toString contents}; do
+        for item in ${escapeShellArgs (map (c: "${c}") (toList contents))}; do
           echo "Adding $item..."
           rsync -a${if keepContentsDirlinks then "K" else "k"} --chown=0:0 $item/ layer/
         done
diff --git a/pkgs/build-support/docker/examples.nix b/pkgs/build-support/docker/examples.nix
index 9f6823a5878..141c2ba0ea4 100644
--- a/pkgs/build-support/docker/examples.nix
+++ b/pkgs/build-support/docker/examples.nix
@@ -553,4 +553,16 @@ rec {
 
   # Example export of the bash image
   exportBash = pkgs.dockerTools.exportImage { fromImage = bash; };
+
+  build-image-with-path = buildImage {
+    name = "build-image-with-path";
+    tag = "latest";
+    contents = [ pkgs.bashInteractive ./test-dummy ];
+  };
+
+  layered-image-with-path = pkgs.dockerTools.streamLayeredImage {
+    name = "layered-image-with-path";
+    tag = "latest";
+    contents = [ pkgs.bashInteractive ./test-dummy ];
+  };
 }