Suggestion: a "docker pull --dry-run" option
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 45/100
Direzione di ricerca
L'issue non indica file o test specifici. Inizia tracciando il punto di ingresso del comando docker pull di Docker CLI e stabilisci il comportamento previsto del dry-run per la disponibilità delle immagini, lo stato restituito, l'output e le immagini multipiattaforma. Il lavoro è completato quando il comportamento concordato è implementato e coperto da test.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
It would be useful in some automation environment to detect if there are new images available without pulling them right away. In my case, the launcher script detects if there is an update, and offers it to the user.
In an ideal world, I would launch docker pull --dry-run and either parse the output or check the return code.
Migrated from this issue, as suggested in the thread to make a feature request in the Docker CLI :
https://github.com/distribution/distribution/issues/2412
Workaround:
It is possible to achieve this using image inspection. The following script works in my case but has major flaws : is is slow, will break if the manifest structure changes, and works only because the variant I use happens to be the first in the remote repo's manifest. I feel that there is nothing better that a docker pull to know what a docker pull should be doing, and any scripting attempt like this one is an approximation.
images=$(docker compose config | grep 'image:' | awk '{print $2}')
for image in $images; do
# Get the local digest in the format sha256:<hash>
localDigest=$(docker image inspect --format='{{index .Id}}' $image 2>/dev/null)
if [[ $? -ne 0 ]]; then
echo "At least one image not found locally: $image"
updatesFound=true
break
fi
echo $localDigest
# Get the remote digest in format sha256:<hash>
# This works ONLY if the desired config is from the first variant
# Would have been cleaner with jq but it is not available in a git bash on Windows...
remoteDigest=$(docker manifest inspect -v $image \
| awk '/"config":/ {found=1} found&& /"digest"/ {print $2; exit}' \
| tr -d '",')
echo $remoteDigest
# Perform comparison
if [[ "$localDigest" == "$remoteDigest" ]]; then
echo "Up to date: $image"
else
echo "At least one image outdated: $image"
updatesFound=true
break
fi
done
EDIT: Workaround does not work on a mac, as the content of docker image inspect differs.
- Lingua principale
- Go
- Stelle
- 6.1k
- Fork
- 2.2k
- Merge medio
- 1g 10h
- PR unite (30g)
- 47
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di docker/cli
-
kind/bug status/0-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
kind/bug status/0-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
-
kind/feature status/0-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
kind/bug status/0-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
acceptance-tests phase-coding schema-coverage testing triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100