ECR で Docker イメージのプッシュが no such host で失敗するときの対処方法

2022.01.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

ECR に Docker イメージをプッシュしたところno such hostというエラーが表示されます。調べてみるとプロキシ関係のエラーのようですが、EC2 を使っていて特にプロキシが必要な環境ではありません。
ECR に Docker イメージをプッシュするにはどうしたら良いでしょうか?

$ docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.co/hello-world:latest
The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.co/hello-world]
Get "https://123456789012.dkr.ecr.ap-northeast-1.amazonaws.co/v2/": dial tcp: lookup 123456789012.dkr.ecr.ap-northeast-1.amazonaws.co on 10.0.0.2:53: no such host

どう対応すればいいの?

レジストリのホスト名(例:123456789012.dkr.ecr.ap-northeast-1.amazonaws.com)に間違いがないか確認してください。

ECR に Docker イメージをプッシュする際は次のイメージ名を付与する必要があります。

Docker イメージをプッシュする - Amazon ECR

【アカウントID】.dkr.ecr.【リージョン】.amazonaws.com/【リポジトリ名】:【タグ】
# 例
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world:latest

イメージ名の/で区切られた前半部分は、Docker イメージを保存するレジストリのホスト名(サーバー名)となり、誤ったホスト名を指定すると「指定したサーバーが存在しない(no such host)」というエラーが発生します。

そのため、レジストリのホスト名部分に誤りがないか確認してください。

$ docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.co/hello-world:latest
# mが不足                                                     ^

なお、nslookupコマンドでホストの存在確認ができます。

# ホストが存在しない場合
$ nslookup 123456789012.dkr.ecr.ap-northeast-1.amazonaws.co
Server:		1.1.1.1
Address:	1.1.1.1#53

** server can't find 123456789012.dkr.ecr.ap-northeast-1.amazonaws.co: NXDOMAIN


# ホストが存在する場合
$ nslookup 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
Server:		1.1.1.1
Address:	1.1.1.1#53

Non-authoritative answer:
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com	canonical name = nlb3-a01fc3168d6b4c7e.elb.ap-northeast-1.amazonaws.com.
Name:	nlb3-a01fc3168d6b4c7e.elb.ap-northeast-1.amazonaws.com
Address: 52.192.36.247

参考資料