ひとことで言うと

# イメージにタグを付ける
docker tag <元イメージ>:<> <新しいイメージ>:<>

# 例: レジストリ用にタグ付けしてpush
docker tag myapp:latest myuser/myapp:1.0.0
docker push myuser/myapp:1.0.0

やりたかったこと / 現象

ローカルでビルドしたイメージをDocker HubやプライベートレジストリにPushしようとしたら、denied: requested access to the resource is denied と言われてしまった——多くの人がここで docker tag の存在に気づきます。

Dockerはイメージ名(正確には「リポジトリ名」)を見てpush先を判断するため、ローカルでビルドした myapp:latest のような名前のままでは、レジストリのユーザー名やリポジトリパスが含まれておらずpushできません。docker tag を使ってレジストリ向けの名前を付け直す必要があります。


環境

  • Docker: 20.10以降で動作確認
  • OS: Linux / macOS / Windows(WSL2)

解決策

1. 基本構文

docker tag <SOURCE_IMAGE>[:TAG] <TARGET_IMAGE>[:TAG]

docker tag はイメージを複製するのではなく、既存のイメージID に対して新しい名前(参照)を追加するだけです。ディスク容量は増えません。

2. Docker Hub にpushするためのタグ付け

# 書式: <Docker Hubのユーザー名>/<リポジトリ名>:<タグ>
docker tag myapp:latest myuser/myapp:1.0.0

# pushする
docker push myuser/myapp:1.0.0

3. プライベートレジストリにタグ付けする場合

# 書式: <レジストリのホスト名>/<リポジトリ名>:<タグ>
docker tag myapp:latest registry.example.com/myteam/myapp:1.0.0

docker push registry.example.com/myteam/myapp:1.0.0

ホスト名を含めることで、Dockerはどのレジストリにpushすべきかを判断します。

4. 複数のタグを同じイメージに付ける

docker tag myapp:latest myuser/myapp:1.0.0
docker tag myapp:latest myuser/myapp:latest

バージョン番号のタグと latest タグの両方を同じイメージに付けておくと、利用者はバージョン固定と最新版のどちらも選べるようになります。

5. イメージIDから直接タグ付けする

docker images
# IMAGE ID を確認してから
docker tag a1b2c3d4e5f6 myuser/myapp:1.0.0

元イメージの名前がわからない場合や <none> になっている場合でも、IMAGE ID を指定してタグを付けられます。

6. 付けたタグを確認する

docker images myuser/myapp

同じIMAGE IDに対して複数のタグが付いていても、実体のディスク使用量は共有されるため増えません。


よくあるエラーと対処

denied: requested access to the resource is denied

タグにユーザー名・レジストリ名が含まれていないか、ログインしていないことが原因です。

docker login
docker tag myapp:latest myuser/myapp:1.0.0
docker push myuser/myapp:1.0.0

Error response from daemon: No such image

タグ付け元のイメージ名やタグが間違っています。docker images で正確な名前とタグを確認してください。

docker images

latest タグを更新したつもりが古いイメージのままpullされる

latest は「最新版」を意味する特別な仕組みではなく、単なる文字列のタグです。pull元のキャッシュが残っていると古いイメージのままになることがあるため、docker pull 時に明示的にタグを指定するか、docker pull --no-cache 相当の対策(イメージの再取得)が必要です。

タグ名に使える文字のエラー

タグ名には英数字・ピリオド・アンダースコア・ハイフンのみ使用可能です。大文字を含むリポジトリ名はDocker Hubで許可されないため、すべて小文字にしてください。


よくある質問

Q: docker tag はイメージをコピーしますか? いいえ。実体は複製されず、同じイメージIDに対する新しい名前(参照)が追加されるだけです。ディスク使用量は増えません。

Q: タグを付けずに docker push するとどうなりますか? タグを省略すると自動的に latest として扱われます。意図しないタグ上書きを避けるため、明示的にバージョンタグを指定することをおすすめします。

Q: 間違えて付けたタグを削除するには? docker rmi myuser/myapp:1.0.0 でタグ(参照)だけを削除できます。元イメージ自体は他のタグが残っていれば削除されません。

Q: バージョン番号はどう付けるのが一般的ですか? セマンティックバージョニング(1.0.0 のような形式)が一般的です。加えて lateststable などのエイリアスタグを併用するケースも多いです。

Q: docker tagdocker commit の違いは? docker tag は既存イメージに別名を付けるだけですが、docker commit はコンテナの現在の状態から新しいイメージを作成します。用途が異なります。


関連記事

おすすめのVPS/ドメイン/スクール

VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。