目次

docker push 入門:Registry へのイメージのプッシュ方法(--all-tags、docker login)

docker push はイメージを Registry にアップロードします。通常は先に docker tag で宛先名を設定します。Docker Hub の使い方についてはDocker Hubを参照してください。

構文

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker push [OPTIONS] NAME[:TAG]
docker login [OPTIONS] [SERVER]

オプション

オプション説明
-a, --all-tagsイメージのすべてのタグをプッシュします
--platform 文字列指定したプラットフォームの manifest を単一プラットフォームのイメージとしてプッシュします。image index はプッシュされないため、attestation を含む他の manifest は保持されません。形式は os[/arch[/variant]] です。例:linux/amd64
-q, --quiet詳細な出力を非表示にします
-p, --password 文字列パスワードまたは Personal Access Token(PAT)。- を指定すると stdin から読み込みます
--password-stdinパスワードまたは Personal Access Token(PAT)を stdin から読み込みます
-u, --username 文字列ユーザー名

docker login でサーバーを指定しない場合、デフォルトで Docker Hub が使われます。docker tag の宛先名の形式は TARGET_IMAGE[:TAG] です。

例

次の例では、ローカル Registry の localhost:5000 を使い、alpine:3.23 に tools/alpine Repository のタグを付けます。

宛先タグを作成する

$ docker tag alpine:3.23 localhost:5000/tools/alpine:3.23

$ docker tag alpine:3.23 localhost:5000/tools/alpine:latest

$ docker images localhost:5000/tools/alpine
IMAGE                                ID             DISK USAGE   CONTENT SIZE   EXTRA
localhost:5000/tools/alpine:3.23     ff7f0c727dd7       26.6MB         8.21MB        
localhost:5000/tools/alpine:latest   ff7f0c727dd7       26.6MB         8.21MB        
  • 2 つのタグはどちらも同じイメージ ID を参照します。
  • 宛先名には Registry のホストとポート、Repository、それぞれのタグが含まれます。

単一タグとすべてのタグをプッシュする

$ docker push localhost:5000/tools/alpine:3.23
The push refers to repository [localhost:5000/tools/alpine]
5e9b4a97f639: Unavailable
5e9b4a97f639: Pushed
3.23: digest: sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306 size: 1022

 Info -> Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:ff7f0c727dd796aa36787bfcd9a64bf35a6ce72a73451b3359fde849b6703d63 -> sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306

$ docker push localhost:5000/tools/alpine:latest
The push refers to repository [localhost:5000/tools/alpine]
5e9b4a97f639: Layer already exists
latest: digest: sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306 size: 1022

 Info -> Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:ff7f0c727dd796aa36787bfcd9a64bf35a6ce72a73451b3359fde849b6703d63 -> sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306

$ docker push --all-tags localhost:5000/tools/alpine
The push refers to repository [localhost:5000/tools/alpine]
5e9b4a97f639: Layer already exists
3.23: digest: sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306 size: 1022
5e9b4a97f639: Layer already exists
latest: digest: sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306 size: 1022

 Info -> Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:ff7f0c727dd796aa36787bfcd9a64bf35a6ce72a73451b3359fde849b6703d63 -> sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306

 Info -> Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:ff7f0c727dd796aa36787bfcd9a64bf35a6ce72a73451b3359fde849b6703d63 -> sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306
  • 単一タグのプッシュでは digest が報告されます。同じ Layer を再度プッシュすると、Layer already exists と表示されます。
  • --all-tags を使うと、tools/alpine の 3.23 と latest を一度にプッシュします。
  • Info の通知:alpine:3.23 はマルチプラットフォームイメージですが、ローカルには一部のプラットフォームの内容しかないため、現在利用可能な単一プラットフォームのみがプッシュされました(digest は ff7f0c… から単一プラットフォームの 3d6794… に変わっています)。プッシュは成功しており、Registry 内のこのタグが 1 つのプラットフォームだけを持つということです。マルチプラットフォームイメージのプッシュについてはマルチプラットフォームイメージを参照してください。

Registry のタグを確認し、エラーを見分ける

$ wget -qO- http://localhost:5000/v2/tools/alpine/tags/list
{"name":"tools/alpine","tags":["3.23","latest"]}

$ docker push localhost:5000/tools/missing:1.0
The push refers to repository [localhost:5000/tools/missing]
tag does not exist: localhost:5000/tools/missing:1.0

$ docker push docker.io/library/alpine:3.23
The push refers to repository [docker.io/library/alpine]
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Layer already exists
failed commit on ref "manifest-sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306": server message: insufficient_scope: authorization failed
  • Registry のタグ一覧で 3.23 と latest の両方が存在することを確認できます。存在しないローカルタグをプッシュすると、tag does not exist と表示されます。
  • Docker Hub の docker.io/library/alpine にプッシュすると、最後に insufficient_scope: authorization failed が表示されます。library/ は公式イメージの名前空間であり、誰もプッシュできません。
  • Docker Hub にプッシュするには、先に docker login を実行します(オプションは上の表を参照)。また、イメージに自分のアカウント名を使ったタグを付けます。例:アカウント名/alpine:3.23。

関連する章

練習問題

練習:ローカルの alpine:3.23 に localhost:5000/tools/alpine:latest というタグを付けてから、tools/alpine のすべてのタグをプッシュしてください。

解答
docker tag alpine:3.23 localhost:5000/tools/alpine:latest
docker push --all-tags localhost:5000/tools/alpine

よくある質問

イメージをプッシュする前に Registry のタグを付ける必要があるのはなぜですか?

docker tag はソースイメージを参照する宛先名を作成します。例では alpine:3.23 に localhost:5000/tools/alpine:3.23 というタグを付け、その名前をプッシュします。

docker push --all-tags はどのタグをプッシュしますか?

指定した Repository のすべてのタグをプッシュします。例では tools/alpine の 3.23 と latest が両方プッシュされます。

Docker Hub へのプッシュ時に insufficient_scope が表示された場合はどうすればよいですか?

その Repository へのプッシュ権限がありません。例の docker.io/library/alpine は Docker 公式イメージの名前空間なので、個人アカウントからはプッシュできません。Docker Hub にプッシュするには、先に docker login を実行し、イメージに アカウント名/名前:タグ というタグを付けてからプッシュします。[Docker Hub へのプッシュ](/ja/docker/docker-hub/)を参照してください。

プッシュ成功後に単一プラットフォームの Info が表示されるのは失敗ですか?

例ではタグの digest が報告され、その後、利用可能な単一プラットフォームのイメージのみがプッシュされたと表示されます。これは Info の通知であり、そのプッシュが失敗したという意味ではありません。

更新日 2026年10月26日