一、前期准备
1.在服务器上面创建三个目录做为挂载到docker (/mongo/data,/mongo/logs,/mongo/conf )
由于我们要把宿主的配置文件同步容器中,所以要在/mogo/conf创建mogodb的配置文件
mongod.conf ,内容如下:
# 系统日志
systemLog:
destination: file # 输出到文件
path: /var/log/mongodb/mongod.log # 必须与挂载卷对应
logAppend: true # 重启时追加,不截断
verbosity: 0 # 日志级别 0-5,数字越大越详细
# 数据存储
storage:
dbPath: /data/db # 数据目录,必须与挂载卷对应 # 64 位系统默认开,崩溃可恢复
wiredTiger: # 3.2+ 默认引擎
engineConfig:
cacheSizeGB: 2 # WT 缓存,≈(物理内存-1GB)/2,最小 256M
directoryForIndexes: false # 索引与数据放同目录
collectionConfig:
blockCompressor: snappy # 集合压缩算法 snappy/zstd/zlib
indexConfig:
prefixCompression: true # 索引前缀压缩
# 进程管理
processManagement:
fork: false # 容器里必须 false,前台运行
pidFilePath: /tmp/mongod.pid # 容器内路径即可
# 网络
net:
port: 27017
bindIp: 0.0.0.0 # 允许所有网卡访问,配合 -p 27017:27017
maxIncomingConnections: 65536 # 最大并发连接,默认 65536
# 安全(第一次建完管理员后再开)
security:
authorization: disabled # 开启鉴权,第一次启动前可先 disabled 建用户
# keyFile: /data/mongodb-keyfile # 副本集/分片时再加
# 复制集(单节点可省略)
# replication:
# replSetName: rs0
# 分片(单节点可省略)
# sharding:
# clusterRole: shardsvr
# 审计、SNMP、setParameter 等按需再补
注意点:由于我们新建mongodb没有账号所以在配置时,为disabled ,如果创建的用户可以改为【enabled】
安全(第一次建完管理员后再开)
security:
authorization: disabled
2.容器里 MongoDB 进程以 UID 999(mongodb) 身份运行,往 /var/log/mongodb/mongod.log 写文件时没有写权限 ,所以依旧报 FileNotOpen。
# 方案 B:生产环境推荐(把属主直接给容器内的 mongodb 用户)
chown -R 999:999 /mongo/logs
二、使用命令
docker run -d --name mongo-prod --restart=unless-stopped -p 27017:27017 -v /mongo/data:/data/db -v /mongo/logs:/var/log/mongodb -v /mongo/conf/mongod.conf:/etc/mongod.conf:ro mongo:7.0.14 mongod --config /etc/mongod.conf
解读说明:
docker run -d
-d= detached,容器在后台运行。
--name mongo-prod给容器起个名字叫
mongo-prod,方便后续docker stop/start/logs直接引用。
--restart=unless-stopped只要 Docker 服务活着,容器退出就自动重启;手动 stop 才不重启。
-p 27017:27017把宿主机的 27017 端口映射到容器内的 27017 (MongoDB 默认端口)。
外部连接串写
mongodb://宿主机IP:16017。三个
-v挂载(核心)a)
-v /mongo/data:/data/db宿主机真实数据目录 → 容器内 MongoDB 数据路径。
容器删了数据也在。
b)
-v /mongo/logs:/var/log/mongodb宿主机日志目录 → 容器内日志路径。
保证
mongod.log落在宿主机,方便查日志。c)
-v /mongo/conf/mongod.conf:/etc/mongod.conf:ro宿主机配置文件 → 容器内
/etc/mongod.conf,只读 (:ro),防止容器内误改。
mongo:7.0.14使用的镜像版本号,固定 7.0.14,不会自动升级。
mongod --config /etc/mongod.conf容器启动后执行的命令:
用刚才挂进去的配置文件启动
mongod进程。