表題の通り。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コンテナ内で利用するのには意外と便利である。
以上。