網上有很多關於docker-compose安裝mongodb的筆記,但是對於實用config啟動記錄太少,我踩了一下的坑重要把這些問題都走了一遍,記錄下幫助那些跟我一樣遇到問題的人
一、系統環境介紹
- 系統使用的是華為雲服務器,ubuntu18.04
- 安裝docker-ce 版本是19.03.9 最新穩定版
- docker-compose 版本是1.25.5 最新的穩定版
- 下載mongodb鏡像是4.2.6
二、最原始的設置
- docker-compose.yml的內容
version: '3.8'
networks:
mynet:
external: true
services:
mongodb:
image: mongo:4.2.6
networks:
- mynet
env_file:
- ./.env
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /data/mongo_cluster/2727/db:/data/mongo/db
- /data/mongo_cluster/2727/log:/data/mongo/log
- /data/mongo_cluster/2727/2727.conf:/data/mongo/mongo.conf
container_name: mongo_main
environment:
- MONGO_INITDB_ROOT_USERNAME=qumogu
- MONGO_INITDB_ROOT_PASSWORD=xxxxsss
command: mongod -- config /data/mongo/mongo.conf
ports:
- 2727:27017
restart: always
logging:
driver: json-file
options:
max-file: '2'
max-size: 100m
- mongo.conf配置文件內容
logpath=/data/mongo/log/mongo.log
logappend=true
fork = true
port = 27027
dbpath=/data/mongo/db
cpu = true
auth = true
bind_ip = 0.0.0.0
maxConns = 100
objcheck = true
pidfilepath = /data/mongo/run/mongo.pid
三、啟動報錯情況
- 第一錯誤:mongodb forked process: 48 ERROR: child process failed, exited with error number 1
- 第二錯誤:error (at /tmp/docker-entrypoint-config.json:1): Cannot index string with string "systemLog"
- 第三錯誤:child process successful,parent failed
四、配置的問題
-
docker-compose.yml的配置問題:
- command 后面不需要再用mongod了,因為官方docker鏡像已經用了,詳情情況dockerfile鏈接
- mongodb容器里面,使用的用戶是mongodb,不是root,如果不是容器里原有的目錄,掛載后mongodb就無權讀取,這是就是錯誤1的原因。
- 默認的容器里面,/data/db 和 /data/configdb mongodb用戶是有權限,所以,掛載文件就放在這些目錄下
- volumes 掛載目錄和文件不一樣,不能用掛載目錄的方式,掛載文件
-
mongo.conf的配置問題
- fork = true 這個配置,導致第三個錯誤,找不到父進程,系統無法啟動,所以需要去除
五、修改后配置
- docker-compose.yml
version: '3.8'
networks:
mynet:
external: true
services:
mongodb:
image: mongo:4.2.6
networks:
- mynet
env_file:
- ./.env
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /data/mongo_cluster/2727/db:/data/db
- /data/mongo_cluster/2727/opt:/data/configdb
container_name: mongo_main
environment:
- MONGO_INITDB_ROOT_USERNAME=qumogu
- MONGO_INITDB_ROOT_PASSWORD=xxxxsss
# command: --auth --bind_ip 0.0.0.0 --logpath=/data/configdb/log/db.log
command: --config /data/configdb/mongo.conf
ports:
- 2727:27017
restart: always
logging:
driver: json-file
options:
max-file: '2'
max-size: 100m
- mongo.conf
port = 27017
dbpath=/data/db
maxConns = 10000
auth = true
bind_ip = 0.0.0.0
logpath=/data/configdb/log/mongo.log
logappend=true
objcheck = true
- yml配置文件里直接接參數,可能比conf文件,更方便,或者在官方鏡像的基礎再用dockerfile制作一個鏡像會更方便
https://www.cnblogs.com/xsi640/p/3765911.html
