首页 > 解决方案 > 无法连接到直接数据库

问题描述

我在 Node 应用程序中通过 Docker 使用 mongo。
如果我使用以下连接字符串,则可以直接连接到 mongo。

mongodb://root:example@localhost:27017

这样做的目的是,如果我要创建一个集合,它最终会出现在一个名为test
的数据库中,而该数据库不是我创建的。从我搜索的内容来看,这个数据库名称测试是默认设置。

连接字符串应包含数据库名称的示例如下:

mongodb://root:example@localhost:27017/my_actual_db

但是尝试以这种方式连接时,它抱怨我的用户名/密码不再正确。
无法看到这是怎么可能的,因为我使用的是 root 密码,而且如果我
没有在连接字符串中提到数据库,它就可以工作。

我可以请你帮忙吗?
1. 我的问题是为什么用户名/密码不再有效。我的 docker-compose 文件有问题吗?
2. 有没有办法通过猫鼬更改数据库名称?
查看文档,我尝试通过以下选项更改它,但它没有产生差异。
数据库仍然称为测试。

我的 docker-compose.yml 文件

version: "3.1"

services:
  mongo:
    image: mongo
    container_name: mongo-instance-1
    restart: always
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

    volumes:
      - ./data:/data/db

  mongo-express:
    image: mongo-express
    container_name: mongo-express-instance-1
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example

通过节点应用程序中的猫鼬连接。

// process.env.DB_CONNECTION is the connection Strings above
mongoose.connect(process.env.DB_CONNECTION,
  {
    useNewUrlParser: true,
    name: 'my_actual_db', // doesn't make a diff, db name remains as test
  })
  .then(value => {
    console.log(value)
  })
  .catch(err => {
    console.log(err)
  })

标签: javascriptnode.jsmongodbdocker

解决方案


推荐阅读