host からdocker-compose のサービス名で ping しよう
(本稿は ubuntu20.04 中心だけどwindowsや他向けの技術紹介もあるよ)
はじめに
最近の開発でdockerが手放せない人も多くなっていると思う
特にdocker-composeは複数のサービスを簡単に立ち上げられるので楽
設定ファイル docker-compose.yml で
version: '3'
services:
nginx:
image: nginx:alpine
nginx2:
image: nginx:alpine
としてると、 お互いのコンテナでは、サービス名 nginx, nginx2 で呼びあえて楽
$ docker-compose exec nginx ping nginx2
PING nginx2 (172.21.0.3): 56 data bytes
64 bytes from 172.21.0.3: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.21.0.3: seq=1 ttl=64 time=0.143 ms
実際、dockerでプログラムを書くときは埋め込みで名前を入れることも多いハズ
ところが、ホストからは呼ぶことができず、仲間はずれ感が半端ない
$ LANG=C ping nginx2
ping: nginx2: Temporary failure in name resolution
これが ping だったら特に開発に影響はないけど、実際はサービスにアクセスするurlを名前で呼べるか。
http://nginx2
でアクセスできると目視含めて動作のテストが楽なのだ。
こんな軽いテストをやるためでもホストから見ようとすると、IP直打ちか、exportでホスト側に出すしかない。
がこれ、単純にめんどくさいだけじゃない、セキュリティそこそこのものだとipで呼ぶとハッシュが違うエラーとかで出るので、DNSを建てるなどが必要となってきて手間がかかりすぎる
簡易DNSおいてみます?
ホストからもdocker-composeの名前で呼びたいということで紹介するのが dvddarias/docker-hoster
魔法の呪文を打ち打ち
docker run -v /var/run/docker.sock:/tmp/docker.sock \
-v /etc/hosts:/tmp/hosts dvdarias/docker-hoster
あら不思議、ホストからもpingが通ります
$ LANG=C ping nginx2
PING nginx (172.21.0.3) 56(84) bytes of data.
64 bytes from nginx (172.21.0.3): icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from nginx (172.21.0.3): icmp_seq=2 ttl=64 time=0.072 ms
64 bytes from nginx (172.21.0.3): icmp_seq=3 ttl=64 time=0.075 ms
^C
--- nginx2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 3050ms
rtt min/avg/max/mdev = 0.024/0.063/0.081/0.022 ms
実際は、dvdarias/docker-hoster が /etc/hosts を書き換えているだけ。賢い
DNSというのは言いすぎなのかもしれない
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ***
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
#-----------Docker-Hoster-Domains----------
172.17.0.2 nervous_faraday ae55309a041a
172.21.0.4 nginx 194670f908fb test_nginx_1
172.21.0.3 9465f50c0ea1 test_nginx2_1 nginx2
#-----Do-not-add-hosts-after-this-line-----
よく見ると、 コンテナ名なども追記されてる
これで煩わしさがなくなるならと我が家では即導入
みなさんも使われてはどうだろうか
windowsでは使えないの?
この dvdarias/docker-hoster は windows の WSLでは残念ながら使えない。
でも落ち込まないでくれ。
似たものに mageddo/dns-proxy-server がある。
むしろこっちが本命で、筆者もを使おうとしたら ubuntu20.04 と相性が悪いくて、急遽 dvdarias/docker-hoster に切り替えたのだ。
こちらを使っているという人がいたら報告ヨロシク