如何 link mongo 使用节点 docker 撰写

How to link mongo with node using docker compose

我正在尝试 link 我的节点服务器和 Mongo 中的数据库,但不起作用...

这是我的 Docker-Compose.yml:

version: '3.9'

services:
      human:
          build:
            context: ./human-app
          container_name: human
          ports:
            - "3001:3001"
      mongodb:
          image: mongo
          container_name: mongodb
          env_file:
            - ./human-app/srcs/.env
          environment:
            - MONGO_INITDB_ROOT_USERNAME=Pepe
            - MONGO_INITDB_ROOT_PASSWORD=PepePass
            - MONGO_INITDB_DATABASE=Pool
          ports:
            - "27017:27017"
          volumes:
            - ./volumes_mongo:/data/db

当我 运行 命令时:

docker-compose up -d

一切正常但分开,我用命令“docker ps -a”检查状态,结果是这样的:

CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS         PORTS                      NAMES
9335c5cd4940   mongo                       "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:27017->27017/tcp   mongodb
2a28635d2caa   human-selection-app_human   "node server"            4 seconds ago   Up 3 seconds   0.0.0.0:3001->3001/tcp     human

如果我进入我的 mongo 容器,然后跟随下一步 ps,那就发生了:

1- docker exec -it mongodb bash 2- mongo 3-显示数据库“结果没有数据库”

所以,我不能 link 使用我的节点服务器,可能我需要为这 2 个服务创建一个网络?谁能帮我?谢谢。

额外,这就是我从服务器连接到 MongoDB 的方式:

    async _connectDB() {

        //! We create the connection to the database

        const dbUser = process.env.DBUSER;;
        const dbPassword = process.env.DBPASSWORD;
        const dbName = process.env.DBNAME;
        const dbUriLocal = `mongodb://${dbUser}:${dbPassword}@127.0.0.1:27017/${dbName}`;

        
        mongoose.connect(dbUriLocal, { useNewUrlParser: true, useUnifiedTopology: true })
            .then(() => console.log(clc.cyan('Debug: Database connected successfully')))
            .catch(e => console.log(e));
    }

由于您的应用程序也在 运行 内 Docker 容器内,与 MongoDB 服务位于同一网络中,这意味着您应该使用 MongoDB 的服务名称作为连接地址,而不是本地主机 IP 地址。 更改您的 dbUriLocal 变量以使用 MongoDB 服务名称(在您的情况下,它是以 docker-compose.yml 中的服务名称命名的“mongodb”)作为连接地址而不是“127.0.0.1”:

const dbUriLocal = `mongodb://${dbUser}:${dbPassword}@mongodb:27017/${dbName}`;

有关详细信息,请参阅 Docker Compose File Referrence 中的“网络”。