みなさん、Dockerは使ってますか?Dockerをドカドカ使っていると、
「社内のHTTP APIを呼びたいのに、なぜかホスト名をIPアドレスに解決できない」
「本番環境のではなく開発環境のHTTP APIを呼んでしまっている(っぽい)」
なんて、ことが稀によく発生します。
一方で、定石に従ってDockerイメージを作っていると、
「Dockerイメージには最小限のバイナリしか入れていないので
host
もnslookup
も使えない。だからホスト名がどう解決されているかも分からない。」
なんてことも起きがち。
そこで、最小限のコンテナに docker exec
した時にホスト名解決を(雑に)確認できるコマンドを紹介します。
getent
glibc に含まれるコマンドです。
$ getent hosts qiita.com
2406:da14:add:902:68c3:7e8d:a9c:949e qiita.com
2406:da14:add:900:8bc:d6f3:591c:eb91 qiita.com
2406:da14:add:901:3a2b:2b27:a25f:7360 qiita.com
Ruby
$ ruby -rresolv -e 'puts Resolv.getaddress ARGV[0]' qiita.com
54.92.41.140
Python
$ python3 -c 'import sys, socket; print(socket.gethostbyname(sys.argv[1]))' qiita.com
54.250.97.111h