首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker/nodejs/mongodb部署: MongooseError [MongooseServerSelectionError]:连接超时

docker/nodejs/mongodb部署: MongooseError [MongooseServerSelectionError]:连接超时
EN

Stack Overflow用户
提问于 2020-03-07 04:29:52
回答 1查看 1.5K关注 0票数 2

更新2

我面临另一个错误,如果我按如下方式使用path,我将得到“无效的卷规范”错误,甚至将路径更改为"C:/docker-entrypoint-initdb.d/",则init-mongo.sh将不会被执行,然后我将得到"UserNotFound:未能找到用户"xxxx“表示db”"admin“。

代码语言:javascript
复制
    volumes:
      - ./init-mongo/:/docker-entrypoint-initdb.d/
      - dbdata:/data/db

所以我切换到linux容器,所有的错误消息都消失了。

更新

在本地主机上禁用mongodb服务后,我已经解决了问题

代码语言:javascript
复制
net stop MongoDB

并使用端口27017

代码语言:javascript
复制
mongodb:
....
    ports:
      - "27017:27017"
.....

但是我想知道为什么我不能把端口27017换给别人呢?我更改端口是因为如果mongodb在我的计算机上运行(使用27017端口),我将收到以下错误消息,谢谢。

代码语言:javascript
复制
for mongodb  Cannot start service mongodb: failed to create endpoint mongodb on network server_app_network: hnsCall failed in Win32: The process cannot access the file because it is being used by another process. (0x20)

原始

我在windows 10上使用了码头窗口容器,经过两天的挣扎,我仍然无法成功地部署我的项目。我的配置如下,谢谢您的帮助。

server.js

代码语言:javascript
复制
const dbUrl = "mongodb://mongodb:27018/";
mongoose
  .connect(`${dbUrl}mydb`, { useUnifiedTopology: true, useNewUrlParser: true })
  .then(res => {
    db = mongoose.connection;
    app.listen(port, () => {
      console.log(`listening on port ${port}`);
    });
  })
  .catch(error => console.log(error));

docker-compose.yml

代码语言:javascript
复制
version: "3"
services:
  express-server:
    build:
      context: .
      dockerfile: Dockerfile
    image: express-server
    container_name: express-server
    restart: unless-stopped
    ports:
      - "3000:3000"
    links:
      - mongodb
    depends_on: 
      - mongodb
    networks:
      - app_network

  mongodb:
    image: mongo
    container_name: mongodb
    restart: unless-stopped
    ports:
      - "27018:27018"
    networks:
      - app_network
volumes:
  dbdata:
networks:
  app_network:
    driver: nat

运行码头后-组合-构建-d

代码语言:javascript
复制
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                                 NAMES
7fac2380c803        express-server      "node server.js"         57 seconds ago       Up 43 seconds       0.0.0.0:3000->3000/tcp                express-server
9afc21569a1a        mongo               "mongod --bind_ip_all"   About a minute ago   Up 57 seconds       27017/tcp, 0.0.0.0:27018->27018/tcp   mongodb
EN

回答 1

Stack Overflow用户

发布于 2020-03-07 05:25:57

我认为您需要在配置上通过dbName。

代码语言:javascript
复制
mongoose.connect(
    connectionString,
    {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      useFindAndModify: false,
      useCreateIndex: true,
      dbName: 'database-name', // IMPORTANT TO HAVE IT HERE AND NOT IN CONNECTION STRING
    },
    err => { throw err; },
  );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60574391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档