如何 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 中的“网络”。
我正在尝试 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 中的“网络”。