Skip to content

Commit 13ab29f

Browse files
committed
Fixed download of images with mixed layer media types
1 parent 8cac61f commit 13ab29f

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/docker.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ docker::_download() {
130130
local -r user="$1" registry="$2" tag="$4" arch="$5"
131131
local image="$3"
132132

133-
local req_params=() layers=() missing_digests=() cached_digests= manifest= config= media_type=
133+
local req_params=() layers=() missing_digests=() media_types=() cached_digests= manifest= config=
134134
local accept_manifest_list=("-H" "Accept: application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.oci.image.index.v1+json")
135135
local accept_manifest=("-H" "Accept: application/vnd.docker.distribution.manifest.v2+json, application/vnd.oci.image.manifest.v1+json")
136136
local url_manifest="${curl_proto}://${registry}/v2/${image}/manifests/${tag}"
@@ -155,8 +155,8 @@ docker::_download() {
155155
# Fetch the image manifest.
156156
common::log INFO "Fetching image manifest"
157157
common::curl "${curl_opts[@]}" "${accept_manifest[@]}" "${req_params[@]}" -- "${url_manifest}" \
158-
| common::jq -r '(.config.digest | ltrimstr("sha256:"))? // empty, (.layers[0].mediaType)? // empty, ([.layers[].digest | ltrimstr("sha256:")] | reverse | @tsv)?' \
159-
| { common::read -r config; common::read -r media_type; IFS=$'\t' common::read -r -a layers; }
158+
| common::jq -r '(.config.digest | ltrimstr("sha256:"))? // empty, ([.layers[].mediaType] | reverse | @tsv)? // empty, ([.layers[].digest | ltrimstr("sha256:")] | reverse | @tsv)?' \
159+
| { common::read -r config; IFS=$'\t' common::read -r -a media_types; IFS=$'\t' common::read -r -a layers; }
160160

161161
if [ -z "${config}" ] || [ "${#layers[@]}" -eq 0 ]; then
162162
common::err "Could not parse digest information from ${url_manifest}"
@@ -185,7 +185,7 @@ docker::_download() {
185185
if [ "${#missing_digests[@]}" -gt 0 ]; then
186186
common::log INFO "Downloading ${#missing_digests[@]} missing layers..." NL
187187
BASH_ENV="${BASH_SOURCE[0]}" parallel --plain ${TTY_ON+--bar} --shuf --retries 2 -j "${ENROOT_MAX_CONNECTIONS}" -q \
188-
docker::_download_extract "{}" "${media_type}" "${curl_opts[@]}" -f "${req_params[@]}" -- "${url_digest}sha256:{}" ::: "${missing_digests[@]}"
188+
docker::_download_extract "{1}" "{2}" "${curl_opts[@]}" -f "${req_params[@]}" -- "${url_digest}sha256:{1}" ::: "${missing_digests[@]}" :::+ "${media_types[@]}"
189189
common::log
190190
else
191191
common::log INFO "Found all layers in cache"

0 commit comments

Comments
 (0)