Docker-compose 設定檔注意事項

最近在使用 docker-compose 加入 mongodb 時遇到一個地雷。由於近日來的挫折感,不免還是問一下專家,專家馬上說道:「對呀!應該要一樣的!」接著馬上解釋原因。是這樣啦~我真的有看過官方文件以及手上的書,也許我沒看得很仔細所以忽略掉吧!

當初在debug時很認真搜尋網路,發現沒找到相關問題,有提到的只有一個網頁,我想這問題應該在本機開發或者只做demo都不會遇到,不過進到產品階段肯定會碰到。

通常我們在本機開發都會用的yml設定如下:

1
2
3
4
5
6
7
8
version: '3'

services:
mongo:
image: mongo
container_name: mongo_container
ports:
- "27017:27017"

啟動後就能很開心的用GUI或cmd連進mongo進行開發。

問題發生在..
開發階段時,我們將mongo綁定了url(當然在hostfile也加了),如下


1
2
3
4
5
6
7
8
version: '3'
services:
database:
image: mongo
container_name: Mongo_DkrCmps_Test
ports:
- "27117:27017"
entrypoint: [ "/usr/bin/mongod","--bind_ip", "localhost,mongo-local-test.com"]

當很開心的啟動後,就發現用任何方式都無法連線到mongo囉!即使docker-compose ps 也可以看到他在listen的狀態,那麼問題是出在哪?

answer

關鍵就是出在 yml 的 service 名稱,這個命名需要和你設定entrypoint 所bind的內容一樣,所以我們來調整一下..

1
2
3
4
5
6
7
8
version: '3'
services:
mongo-local-test.com:
image: mongo
container_name: Mongo_DkrCmps_Test
ports:
- "27117:27017"
entrypoint: [ "/usr/bin/mongod","--bind_ip", "localhost,mongo-local-test.com"]

然後就可以連線了….
皆大歡喜~