文章目錄
使用 docker compose 建立 MongoDB replica set
之前團隊對於 MongoDB 大多還是定位在 document database 上,交易類型的操作還是仰賴傳統 relation database,近期團隊有意減少團隊的 database 種類,嘗試開始逐步使用 MongoDB 來取代 relation database,而我對於 MongoDB 一直停留在 transaction 支援不足的印象,詢問過 chatgpt 之後才發現從 MongoDB 4 開始就支援 transation 了,所以為了能在本機正常開發相關功能,今天就來紀錄一下如何 docker compose 建立 MongoDB replica set
類似需求的主題,之前的筆記也不少:使用 docker 建立 MongoDB Replica Set、Docker Compose 建立 MongoDB Replica Set、使用 Docker Compose 建立有 Auth 的 MongoDB Replica Set (Single Node)、使用 Docker Compose 建立有 Auth 的 MongoDB Replica Set,但時間都超過四年了,趁著更新 image 版本的機會順便找找看是不是有更適合的做法
基本環境設定
- macOS Sequoia 15.3
- OrbStack Version 1.10.0 (19021)
container image
- (linux/amd64 - 6b0f3b8898c0) mongo:8.0.4
- (linux/arm64/v8 - a76cbb4d4f84) mongo:8.0.4
設定方式
single node
使用 ip
啟動用 entrypoint.sh
docker-compose.yml
啟動方式
ip={實際使用 ip} docker-compose up -d
連線字串
mongodb://{實際使用 ip}:27017/
使用 host name (修改 hostfile)
啟動用 entrypoint.sh
docker-compose.yml
修改 hostfile
grep -q "127.0.0.1 mongodb" /etc/hosts || echo "127.0.0.1 mongodb" | sudo tee -a /etc/hosts
連線字串
mongodb://mongodb:27017/
cluster (3 nodes)
使用 ip
啟動用 entrypoint.sh
docker-compose.yml
啟動方式
ip={實際使用 ip} docker-compose up -d
連線字串
mongodb://{實際使用 ip}:27017,{實際使用 ip}:27018,{實際使用 ip}:27019/
使用 host name (修改 hostfile)
啟動用 entrypoint.sh
docker-compose.yml
修改 hostfile
grep -q "127.0.0.1 host.docker.internal" /etc/hosts || echo "127.0.0.1 host.docker.internal" | sudo tee -a /etc/hosts
連線字串
mongodb://host.docker.internal:27017,host.docker.internal:27018,host.docker.internal:27019/
心得
在進行實際功能測試時,持續收到 authentication error 的訊息,從連線字串的格式、container 環境變數的設定方式、docker compose yaml 的跳脫字元、最後發現 arm64v8 的 image 無法套用 MONGO_INITDB_ROOT_USERNAME
與 MONGO_INITDB_ROOT_PASSWORD
(GitHub issuse:MongoDB container environment variables not applied for authentication windows 版似乎有相同問題),換成 amd64 的 image 可以正常運作
完整內容請參考:GitHub:yowko/docke-compose-mongodb-replica-set
參考資訊
文章作者 Yowko Tsai
上次更新 2025-02-17
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。