ltd*_*dev 4 mongodb node.js docker
我第一次尝试使用 mongodb 来运行在 docker 上的 Node.js 应用程序
这是我的 docker-compose 文件
version: '3'
services:
nodejs:
container_name: sandbox_app
build:
context: .
dockerfile: Dockerfile
ports:
- '3000:3000'
volumes:
- '.:/usr/src/app'
- '/usr/src/app/node_modules'
networks:
- sandboxnet
links:
- mongo
mongo:
image: mongo
container_name: sandbox_db
# restart: always
ports:
- '27017:27017'
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
networks:
- sandboxnet
mongo-express:
image: mongo-express
# restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
depends_on:
- mongo
networks:
- sandboxnet
volumes:
node_modules:
web-root:
driver: local
networks:
sandboxnet:
driver: 'bridge'
Run Code Online (Sandbox Code Playgroud)
这是我的 app.js 文件
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
const connectionUrl = 'mongodb://mongo:27017';
const databaseName = 'sandbox_db';
MongoClient.connect(
connectionUrl,
{ useNewUrlParser: true },
(error, client) => {
if (error) {
return console.log('Unable to connect to the database :(');
}
console.log('Connected succesfully to mongo :)');
const db = client.db(databaseName);
db.collection('users').insertOne({
name: 'John Doe'
});
}
);
Run Code Online (Sandbox Code Playgroud)
当我运行 docker-compose up 时,我在终端上从 mongo 收到以下错误,并且看不到创建的新数据库,既没有用户表也没有添加的记录。我怎样才能解决这个问题?
sandbox_app | Connected succesfully to mongo :) // So skips the first console.log as there are no connection errors
sandbox_app | (node:80) UnhandledPromiseRejectionWarning: MongoError: command insert requires authentication
Run Code Online (Sandbox Code Playgroud)
另外如果我docker-compose exec mongo bash得到这个
docker-compose exec mongo bash
root@ashdja87a89s:/# mongo
MongoDB shell version v4.2.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("14aaa69b-8a7a-462b-ac5a-ff4ae0305d8b") }
MongoDB server version: 4.2.6
> show dbs
>
Run Code Online (Sandbox Code Playgroud)
mongo使用用户名/密码调用
root@06e8e28840bb:/# mongo -u root -p example
Run Code Online (Sandbox Code Playgroud)
你在这
> db.runCommand("connectionStatus")
{
"authInfo" : {
"authenticatedUsers" : [
{
"user" : "root",
"db" : "admin"
}
],
"authenticatedUserRoles" : [
{
"role" : "root",
"db" : "admin"
}
]
},
"ok" : 1
Run Code Online (Sandbox Code Playgroud)
}
用户名/密码定义在docker-compose.yml
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root <-----
MONGO_INITDB_ROOT_PASSWORD: example <-----
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7775 次 |
| 最近记录: |