2016-09-05

讓多個 Docker Container 互相串接的方法

阿舍有二個 Docker Container,一個叫做 couchdb,另一個叫做 couchdb-lucene,這二個 Container 都要能互相找的到對方 (也就說,彼此要能透過 Container Name 來當 Host Name 的意思哩 ! ),這樣,阿舍的 CouchDB 的全文搜尋功能 (Full-Text Searching)才能正常作用,嗯 ... CouchDB-Lucene Docker Image 的網站上是用 Docker Compose 來建立一個專用的 Bridge 網路的方式來達成,但是,聰明的阿舍覺得說 ... 應該不用這麼麻煩吧 ! Docker run 指令不是有那個 --link 選項可以用串接 Docker Container 嗎 ? 所以,阿舍就很直接的用那個 --link 選項讓二個 Container 互相串來串去,然後 ... 阿舍就深陷在一個雞生蛋,蛋生雞的輪迴之中了哩 ...



喔 ! 阿舍試了才知,原來,要被 Link 的 Container 要先活著,別的 Conatiner 才能串接的到它,不然,就會出現 "Could not get container for ..." 的訊息,所以,像阿舍這樣想偷懶而要利用 Docker run 的 --link 選項來互串是件不可能的事哩 ... 因此,如果想要讓二個 Container 可以互相串連的話,還是得回到建立 Docker 專用網路的方法才行哩 ~~ (如果沒用 --link 選項的話,可參考阿舍寫的這一篇哩 !)

講到新建 Docker 網路這件事,阿舍一想到就覺得好像很煩人的樣子,但是,事實證明,是阿舍想多了,建立一個專用的 Docker 網路,就只要一行指令就可以搞定了,以阿舍要建立一個名為 cdb-net 的網路為例,就只要執行下面這一行就可以了哩,然後,不需要的時候,用下面的第二行指令就可以輕易的移除 ...

$ docker network create cdb-net

$ docker network rm cdb-net

建好網路之後,就是要把 Container 執行在這個新建的網路裡,而作法和一般執行 docker run 的方式一模一樣,就只差了要多用一個 --net 選項來指定這個 Container 要使用的網路即可,所以,阿舍當要把上面提到的 couchdb 和 couchdb-lucene 二個 Container 放在剛剛新增的 cdb-net 網路的話,就只要執行下面這二行指令就可以讓這二個 Container 互相串接了哩 ...

$ docker run --name couchdb -p 5984:5984 --net=couchdb-net  -d klaemo/couchdb:1.6.1

$ docker run --name couchdb-lucene -p 5985:5985 --net=couchdb-net -d klaemo/couchdb-lucene

阿舍本來以為,還得要再加上一佪 --net-alias 的選項來選 Container 加上別名才能像 --link 選項的效果一樣,可以用名稱來找到 Container,但是,阿舍試了一下,結果,是不需的,後來,阿舍查了一下 docker 的說明,似乎是因為新版的 docker 內建有 DNS 的功能,預設會直接用 --name 選項的名稱來當 Container 的 Host 名稱的樣子,這個阿舍還要再查一下,不過,確定是不需要用到 --net-alias 選項哩 ...



推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁