docker安装mongodb

一、前期准备

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

解读说明:

  1. docker run -d
    -d = detached,容器在后台运行。

  2. --name mongo-prod

    给容器起个名字叫 mongo-prod,方便后续 docker stop/start/logs 直接引用。

  3. --restart=unless-stopped

    只要 Docker 服务活着,容器退出就自动重启;手动 stop 才不重启。

  4. -p 27017:27017

    把宿主机的 27017 端口映射到容器内的 27017 (MongoDB 默认端口)。

    外部连接串写 mongodb://宿主机IP:16017

  5. 三个 -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),防止容器内误改。

  6. mongo:7.0.14

    使用的镜像版本号,固定 7.0.14,不会自动升级。

  7. mongod --config /etc/mongod.conf

    容器启动后执行的命令:

    用刚才挂进去的配置文件启动 mongod 进程。

相关推荐
Destiny_where2 小时前
k8s常用指令集合
linux·docker·kubernetes
叮咚侠2 小时前
将已创建的Elasticsearch 8.12.0的docker容器中的数据挂载到宿主机操作步骤
运维·elasticsearch·docker·容器·kibana
wang6021252182 小时前
OCR服务-本地打包docker+docker下载ssh调试
docker·ssh·ocr
wuxingge2 小时前
docker设置代理,通过代理服务器拉取镜像
docker·容器
SZ1701102312 小时前
K8s 部署所需的配置文件
云原生·容器·kubernetes
小池先生2 小时前
docker 安装gitlab
docker·容器·gitlab
Wang's Blog3 小时前
RabbitMQ: 基于Docker技术实施集群部署实战指南
分布式·docker·rabbitmq
A-刘晨阳3 小时前
【探索实战】基于Kubernetes部署Kurator
运维·云原生·容器·kubernetes·kurator
bloglin9999913 小时前
启动容器报错ls: cannot access ‘/docker-entrypoint-initdb.d/‘: Operation not permitted
docker·容器·eureka