网上有很多关于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