目次
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。
関連する章
- Docker Hub:Docker Hub のイメージと Repository
- イメージ:ローカルイメージを確認する
- マルチプラットフォームイメージ:プラットフォームと manifest
- ディスク容量をクリーンアップする:未使用のイメージを削除する
練習問題
練習:ローカルの 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日