在mac上使用docker部署Mongo数据库

Posted 马会东的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在mac上使用docker部署Mongo数据库相关的知识,希望对你有一定的参考价值。

拉取镜像

  1. 打开网址 https://hub.docker.com/ ,搜索 mongo ,https://hub.docker.com/_/mongo
  2. 执行命令 docker pull mongo

启动容器

  1. 执行命令 docker image ,查看到 mongo的tag是 5.0.16
  2. 启动命令 docker run -dit --name mongo5 -p 27017:27017 -v /Users/huidongma/data/mongodb:/data/db -e MONGO_INITDB_ROOT_USERNAME=smkdb -e MONGO_INITDB_ROOT_PASSWORD=smkdb123 mongo:5.0.16

创建用户并授权数据库

  1. 链接数据库 mongo -u smkdb -p smkdb123
  2. 创建用户:
    use smkdb
    db.createUser(
    user: "smkdb",
    pwd: "smkdb123",
    roles: [role: "readWrite", db: "smkdb"]
    )

导入数据库备份

mongorestore -u smkdb -p smkdb123 --db smkdb /data/db/mhd

MongooseModule:无法连接到数据库。在带有 Mongo 的 dockerized Nestjs 应用程序上

【中文标题】MongooseModule:无法连接到数据库。在带有 Mongo 的 dockerized Nestjs 应用程序上【英文标题】:MongooseModule: Unable to connect to the database. On a dockerized Nestjs app with Mongo 【发布时间】:2021-08-23 14:04:13 【问题描述】:

我正在尝试使用 docker-compose 启动 react-nestjs-mongo db 应用程序,但由于某种原因它似乎不起作用。 docker-compose --build 输出显示如下:

服务器 | [Nest] 32 - 06/06/2021,凌晨 3:10:25 [MongooseModule] 无法连接到数据库。正在重试 (7)... +33006ms

数据库 | "t":"$date":"2021-06-06T03:10:27.406+00:00","s":"I", "c":"STORAGE", "id":22430, "ctx":"WTCheckpointThread","msg":"WiredTiger 消息","attr":"消息":"[1622949027:406819][1:0x7f9ae2c3b700], WT_SESSION.checkpoint:[WT_VERB_CHECKPOINT_PROGRESS] 保存检查点 快照最小值:7,快照最大值:7 快照计数:0,最早的时间戳: (0, 0) ,元检查点时间戳:(0, 0)"

这是我的 docker-compose:

version: "3.5"

services:   client:
    container_name: client
    build: ./client
    ports:
      - 3000:3000
    depends_on:
      - server

  server:
    container_name: server
    build: ./server
    ports:
      - 8000:8000
    depends_on:
      - mongodb
    links:
      - mongodb

  mongodb:
    container_name: database
    image: mongo
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

我的 app.modules.ts 文件如下所示:

import  Module  from '@nestjs/common';
import  AppController  from './app.controller';
import  AppService  from './app.service';
import  MongooseModule  from '@nestjs/mongoose';

@Module(   
imports: [
    MongooseModule.forRoot('mongodb://localhost:27017/nestjs', 
      useNewUrlParser: true,
    ),   
],   
controllers: [AppController],   
providers: [AppService],
 )  
class AppModule 

谁能解释一下为什么这不起作用?

【问题讨论】:

【参考方案1】:

您正在使用 docker-compose 。因此,您没有连接“localhost”,但它应该是您在 docker-compose 文件中定义的“服务”的地址。

而不是 'mongodb://localhost:27017/nestjs' ,您应该使用(在您的情况下,您在 docker-compose 中定义的服务名称是 mongodb 。您应该使用 'mongodb://mongodb:27017/nestjs'

【讨论】:

以上是关于在mac上使用docker部署Mongo数据库的主要内容,如果未能解决你的问题,请参考以下文章

云原生之Docker实战使用Docker部署MongoDB数据库管理工具Mongo-Express

docker部署mongo 4.*集群

kubernetes (kubectl) 端口转发在 Mac 上无法用于 IBM MQ/Docker 部署

docker stack部署与mongo卷

Dockers 部署 MongoDB + mongo-express

docker部署mongo集群