diff options
author | Graham Christensen <graham.christensen@target.com> | 2018-09-20 11:40:36 -0400 |
---|---|---|
committer | Robin Gloster <mail@glob.in> | 2018-09-20 18:26:02 +0200 |
commit | a32d7e0c74465e685c997624b12d1582fda05fd9 (patch) | |
tree | 1bb5ddff773eb6018081132bbcf168df0f1028d5 /pkgs/build-support/docker/default.nix | |
parent | b0987f201337042af2a414549e1948e82d994290 (diff) | |
download | nixpkgs-a32d7e0c74465e685c997624b12d1582fda05fd9.tar nixpkgs-a32d7e0c74465e685c997624b12d1582fda05fd9.tar.gz nixpkgs-a32d7e0c74465e685c997624b12d1582fda05fd9.tar.bz2 nixpkgs-a32d7e0c74465e685c997624b12d1582fda05fd9.tar.lz nixpkgs-a32d7e0c74465e685c997624b12d1582fda05fd9.tar.xz nixpkgs-a32d7e0c74465e685c997624b12d1582fda05fd9.tar.zst nixpkgs-a32d7e0c74465e685c997624b12d1582fda05fd9.zip |
dockerTools.buildImage: support impure dates
Because dates are an impurity, by default buildImage will use a static date of one second past the UNIX Epoch. This can be a bit frustrating when listing docker images in the CLI: $ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE hello latest 08c791c7846e 48 years ago 25.2MB If you want to trade the purity for a better user experience, you can set created to now. pkgs.dockerTools.buildImage { name = "hello"; tag = "latest"; created = "now"; contents = pkgs.hello; config.Cmd = [ "/bin/hello" ]; } and now the Docker CLI will display a reasonable date and sort the images as expected: $ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE hello latest de2bf4786de6 About a minute ago 25.2MB
Diffstat (limited to 'pkgs/build-support/docker/default.nix')
-rw-r--r-- | pkgs/build-support/docker/default.nix | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix index 93b715659eb..0cee1dd2916 100644 --- a/pkgs/build-support/docker/default.nix +++ b/pkgs/build-support/docker/default.nix @@ -450,11 +450,18 @@ rec { baseName = baseNameOf name; # Create a JSON blob of the configuration. Set the date to unix zero. - baseJson = writeText "${baseName}-config.json" (builtins.toJSON { - inherit created config; - architecture = "amd64"; - os = "linux"; - }); + baseJson = let + pure = writeText "${baseName}-config.json" (builtins.toJSON { + inherit created config; + architecture = "amd64"; + os = "linux"; + }); + impure = runCommand "${baseName}-config.json" + { buildInputs = [ jq ]; } + '' + jq ".created = \"$(TZ=utc date --iso-8601="seconds")\"" ${pure} > $out + ''; + in if created == "now" then impure else pure; layer = if runAsRoot == null @@ -577,7 +584,7 @@ rec { currentID=$layerID while [[ -n "$currentID" ]]; do layerChecksum=$(sha256sum image/$currentID/layer.tar | cut -d ' ' -f1) - imageJson=$(echo "$imageJson" | jq ".history |= [{\"created\": \"${created}\"}] + .") + imageJson=$(echo "$imageJson" | jq ".history |= [{\"created\": \"$(jq -r .created ${baseJson})\"}] + .") imageJson=$(echo "$imageJson" | jq ".rootfs.diff_ids |= [\"sha256:$layerChecksum\"] + .") manifestJson=$(echo "$manifestJson" | jq ".[0].Layers |= [\"$currentID/layer.tar\"] + .") |