(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Docker】linkオプションでコンテナ間を接続する

スポンサーリンク

はじめに

オプションを指定せずにコンテナを作成するとそのコンテナはbridgeに接続されます。
よって、特段手当をせずとも同一ホスト上ではコンテナ間で通信可能です。

参考記事

一方で、コンテナを作成する際に接続先のコンテナが判明している場合はdocker run --linkオプションを使えばもっとシンプルに接続可能です。

2つのコンテナをリンクする

# man docker-run

でlinkオプションを確認します。

--link=[]
Add link to another container in the form of :alias or
just in which case the alias will match the name

要は、接続したいコンテナの情報が起動するコンテナのhostsファイルに記載されます

例えば以下のCONTAINERID/IMAGE/NAMEのコンテナが起動している状態で

49745c19a711  ubuntu  jovial_joliot  

コンテナをlinkオプション付きで作成します。testlinkとaliasを指定しました。

# docker run -it --link 49745c19a711:testlink ubuntu

そうすると/etc/hostsが以下のようになっています。

root@1a77e425c2ae:/# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4      testlink 49745c19a711 jovial_joliot
172.17.0.5      1a77e425c2ae

IPアドレスを自動的に収集し、49745c19a711のコンテナが自動的にhosts登録されています。

netcatを用いてtestlink宛てに送付すると

# nc testlink 8888
test
^C

49745c19a711のコンテナで確かに受信できました。

# nc -lp 8888
test

ちなみに接続先のコンテナが起動していない状態でlinkオプションを用いると以下のようにエラーとなるのでご注意ください。

# docker run -it --link 49745c19a711 ubuntu
/usr/bin/docker-current: Error response from daemon: Cannot link to a non running container: /jovial_joliot AS /sad_clarke/49745c19a711.

終わりに

いちいち接続先のdockerのIPアドレスを調べたりすることなく自動的にhosts追加できるため、複数コンテナの連携を行う際に有効です
数あるdocker runのオプションの中でも、--linkオプションはよく出てくるのでこの機会に覚えておくと役立つと思います。

以上、ご参考になれば幸いです。