Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Suggestion: a "docker pull --dry-run" option

オープン
#6,059 コメント 7 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
45/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
docker, go
領域
cli

調査の方向性

この issue では、特定のファイルやテストは指定されていません。まず Docker CLI の docker pull コマンドのエントリーポイントを追跡し、イメージの可用性、戻り値、出力、マルチプラットフォームイメージに関して期待される dry-run の動作を明確にします。合意した動作が実装され、テストでカバーされれば完了です。

索引モデルが issue の本文から書いたものです。

説明

kind/feature status/0-triage

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.

主要言語
Go
スター
6.1k
フォーク
2.2k
平均マージ
1日 10時間
マージ済み PR(30日)
47

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

docker/cli のほかの issue

docker/cli の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。