mongoose docker 尽管连接成功,CRUD 仍无法正常工作
mongoose docker CRUD not working despite successful connection
我正在学习 docker 并创建一个简单的网络应用程序来添加两个数字。我想保存和获取 MongoDB
中的操作
我为 mongodb 和节点创建了自己的 Docker 文件,还创建了一个 docker-compose 文件。 Mongoose 能够连接到我的 MongoDB 容器。
当我尝试创建文档时,我无法通过 mongoose 或 mongo shell 找到它。我还通过 mongo shell 在同一个数据库中创建了一个文档,但我仍然找不到它。
MongoDB docker文件
FROM ubuntu:20.04
RUN apt update
RUN apt install -y wget gnupg
RUN wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add -
RUN echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | \
tee /etc/apt/sources.list.d/mongodb-org-5.0.list
RUN apt update
RUN apt install -y mongodb-org=5.0.2 mongodb-org-database=5.0.2 mongodb-org-server=5.0.2 \
mongodb-org-shell=5.0.2 mongodb-org-mongos=5.0.2 mongodb-org-tools=5.0.2
EXPOSE 27017
CMD ["/usr/bin/mongod", "-f", "/etc/mongod.conf"]
节点Docker文件
FROM ubuntu:20.04
SHELL ["/bin/bash", "-c"]
RUN apt update
RUN apt install -y curl
RUN mkdir /usr/local/nvm
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 14.18.1
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash \
&& source $NVM_DIR/nvm.sh \
&& nvm install v$NODE_VERSION
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
RUN mkdir /usr/app
WORKDIR /usr/app
COPY . /usr/app
RUN npm install
RUN npm install -g nodemon
EXPOSE 3000
CMD ["nodemon", "index.js"]
Docker 撰写文件
version: "3.9"
services:
db:
image: db
build:
context: ./
dockerfile: Dockerfile.mongodb
ports:
- "27017:27017"
volumes:
- /home/rohit/Downloads/mongodb_data:/var/lib/mongodb
app:
image: app
build:
context: ./
dockerfile: Dockerfile.node
ports:
- "3000:3000"
volumes:
- /home/rohit/github_repos/node-react-jenkins-docker/:/usr/app
depends_on:
- db
节点app.js
const bodyParser = require('body-parser');
const express = require('express');
const mongoose = require('mongoose');
const app = express();
app.use(bodyParser.urlencoded({extended: true}));
mongoose.connect('mongodb://db:27017/test', {useNewUrlParser: true})
.catch(err => {
console.log(err);
});
const testSchema = new mongoose.Schema({
num1: Number,
num2: Number,
result: Number,
});
const Sum = mongoose.model('sum', testSchema);
const sum = new Sum({
num1: 5,
num2: 3,
result: 8,
});
sum.save();
Sum.find((err, sums) => {
console.log(sums);
});
app.get('/', function (req, res){
res.sendFile(__dirname + '/index.html');
});
app.post('/', function (req, res){
var num1 = Number(req.body.num1);
var num2 = Number(req.body.num2);
var result = num1 + num2;
res.send('The result of calculation is ' + result);
});
module.exports = app
我执行了 docker-compose build
然后 docker-compose up
我可以在我的浏览器上成功访问 localhost:3000,但我没有看到控制台日志。
我已经挂载了我的工作目录,这样我在本地所做的任何更改都会被节点容器获取。
docker container ls
给出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f98d3a819b2 app "nodemon index.js" About an hour ago Up About an hour 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp node-react-jenkins-docker_app_1
d2a4a2ca229a db "/usr/bin/mongod -f …" About an hour ago Up About an hour 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp node-react-jenkins-docker_db_1
尝试访问容器中的 mongo shell
docker container exec -it node-react-jenkins-docker_db_1 mongo
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
> db
test
> show collections
sums
> db.sums.find()
{ "_id" : 1, "num1" : 2, "num2" : 1, "result" : 3 }
>
它显示了我手动创建的文档,但我无法通过 app.js 中的 Sum.find() 访问它。我也没有看到 app.js 成功运行时应该创建的文档。
请在 GitHub
找到完整的存储库
在与一位经验丰富的开发人员交谈后,我解决了自己的问题。原来 mongod.conf 文件中的 bindIp 需要设置为 0.0.0.0 然后它开始工作。共享以防其他人遇到同样的问题。
我正在学习 docker 并创建一个简单的网络应用程序来添加两个数字。我想保存和获取 MongoDB
中的操作我为 mongodb 和节点创建了自己的 Docker 文件,还创建了一个 docker-compose 文件。 Mongoose 能够连接到我的 MongoDB 容器。
当我尝试创建文档时,我无法通过 mongoose 或 mongo shell 找到它。我还通过 mongo shell 在同一个数据库中创建了一个文档,但我仍然找不到它。
MongoDB docker文件
FROM ubuntu:20.04
RUN apt update
RUN apt install -y wget gnupg
RUN wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add -
RUN echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | \
tee /etc/apt/sources.list.d/mongodb-org-5.0.list
RUN apt update
RUN apt install -y mongodb-org=5.0.2 mongodb-org-database=5.0.2 mongodb-org-server=5.0.2 \
mongodb-org-shell=5.0.2 mongodb-org-mongos=5.0.2 mongodb-org-tools=5.0.2
EXPOSE 27017
CMD ["/usr/bin/mongod", "-f", "/etc/mongod.conf"]
节点Docker文件
FROM ubuntu:20.04
SHELL ["/bin/bash", "-c"]
RUN apt update
RUN apt install -y curl
RUN mkdir /usr/local/nvm
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 14.18.1
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash \
&& source $NVM_DIR/nvm.sh \
&& nvm install v$NODE_VERSION
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
RUN mkdir /usr/app
WORKDIR /usr/app
COPY . /usr/app
RUN npm install
RUN npm install -g nodemon
EXPOSE 3000
CMD ["nodemon", "index.js"]
Docker 撰写文件
version: "3.9"
services:
db:
image: db
build:
context: ./
dockerfile: Dockerfile.mongodb
ports:
- "27017:27017"
volumes:
- /home/rohit/Downloads/mongodb_data:/var/lib/mongodb
app:
image: app
build:
context: ./
dockerfile: Dockerfile.node
ports:
- "3000:3000"
volumes:
- /home/rohit/github_repos/node-react-jenkins-docker/:/usr/app
depends_on:
- db
节点app.js
const bodyParser = require('body-parser');
const express = require('express');
const mongoose = require('mongoose');
const app = express();
app.use(bodyParser.urlencoded({extended: true}));
mongoose.connect('mongodb://db:27017/test', {useNewUrlParser: true})
.catch(err => {
console.log(err);
});
const testSchema = new mongoose.Schema({
num1: Number,
num2: Number,
result: Number,
});
const Sum = mongoose.model('sum', testSchema);
const sum = new Sum({
num1: 5,
num2: 3,
result: 8,
});
sum.save();
Sum.find((err, sums) => {
console.log(sums);
});
app.get('/', function (req, res){
res.sendFile(__dirname + '/index.html');
});
app.post('/', function (req, res){
var num1 = Number(req.body.num1);
var num2 = Number(req.body.num2);
var result = num1 + num2;
res.send('The result of calculation is ' + result);
});
module.exports = app
我执行了 docker-compose build
然后 docker-compose up
我可以在我的浏览器上成功访问 localhost:3000,但我没有看到控制台日志。
我已经挂载了我的工作目录,这样我在本地所做的任何更改都会被节点容器获取。
docker container ls
给出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f98d3a819b2 app "nodemon index.js" About an hour ago Up About an hour 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp node-react-jenkins-docker_app_1
d2a4a2ca229a db "/usr/bin/mongod -f …" About an hour ago Up About an hour 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp node-react-jenkins-docker_db_1
尝试访问容器中的 mongo shell
docker container exec -it node-react-jenkins-docker_db_1 mongo
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
> db
test
> show collections
sums
> db.sums.find()
{ "_id" : 1, "num1" : 2, "num2" : 1, "result" : 3 }
>
它显示了我手动创建的文档,但我无法通过 app.js 中的 Sum.find() 访问它。我也没有看到 app.js 成功运行时应该创建的文档。
请在 GitHub
找到完整的存储库在与一位经验丰富的开发人员交谈后,我解决了自己的问题。原来 mongod.conf 文件中的 bindIp 需要设置为 0.0.0.0 然后它开始工作。共享以防其他人遇到同样的问题。