名前から解決できるIPアドレスを知る

表題の通り。shellスクリプトの中で、自身のIPアドレスを取得したい時がある。そんな時に使える方法。ただし”hostname“コマンドで得られるホスト名で解決できるIPアドレスに限る。

■ 環境

  • CentOS 6.6
  • AmazonLinux

■ hostname設定済みVM

Vagrantで起動しているCentOSで、Vagrantfile内でhostnameを設定していると下記のようになる。

$ hostname -i
127.0.0.1
$

これは、/etc/hostsファイルにて、Vagrantfileで設定したホスト名が”127.0.0.1“にて解決できるよう設定されている為である。しかし、一般的に取得したいIPアドレスとは異なると思われる。

■ DNSで名前解決できるホスト

これはイメージ通りのIPアドレスが取得できる。

$ hostname -i
XX.XX.X.XXX
$

■ 名前解決できないEC2

ちょっと設定を入れなければ、EC2でも名前解決ができなかった気がする。

$ hostname
ip-XX-XX-XX-XX
$
$ hostname -i
hostname: 不明なホストです
$

/etc/hostsファイル等に書けば良いのかもしれないが、期待通りの結果にはならないかもしれない。自身の場合は/etc/resolv.confを編集し、ip-XX-XX-XX-XXでも名前解決できるように変更してしまっている。

■ Dockerコンテナ

今回のこの”-i“オプションの存在を知ったのは、Dockerでコンテナに組み込むshellスクリプトの中であった。

[root@[CONTAINER_ID] /]# hostname
5976ffca2f94
[root@[CONTAINER_ID] /]#

Dockerコンテナ内では、コンテナIDがホスト名として設定されている。/etc/hostsファイルも下記のようになっている。

[root@[CONTAINER_ID] /]# cat /etc/hosts
172.17.0.4    5976ffca2f94
127.0.0.1     localhost

その為、下記のように取得できる。

[root@[CONTAINER_ID] /]# hostname -i
172.17.0.4
[root@[CONTAINER_ID]]# 

どんな環境においても使えるわけではないが、Dockerコンテナ内で利用するのには意外と便利である。

以上。