【问题标题】:docker/nodejs/mongodb deployment : MongooseError [MongooseServerSelectionError]: connection timed outdocker/nodejs/mongodb 部署:MongooseError [MongooseServerSelectionError]:连接超时
【发布时间】:2020-03-07 21:17:46
【问题描述】:

更新 2

我面临另一个错误, 如果我按如下方式使用路径,我将收到“无效的卷规格”错误 甚至将路径更改为“C:/docker-entrypoint-initdb.d/”,init-mongo.sh 将不会被执行,然后我得到“UserNotFound: Could not find user "xxxx" for db "admin"

    volumes:
      - ./init-mongo/:/docker-entrypoint-initdb.d/
      - dbdata:/data/db

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

更新

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

net stop MongoDB

并使用端口 27017

mongodb:
....
    ports:
      - "27017:27017"
.....

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

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 上使用 docker windows 容器。 经过两天的努力,我仍然无法成功部署我的项目。 我的配置如下,谢谢帮助..

server.js

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

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

在运行 docker-compose up --build -d 之后

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

【问题讨论】:

  • express 服务在mongodb 准备好之前启动。尝试使用命令docker-compose restart express 重新启动express 服务。或者搜索wait-fordocker compose 解决方案。
  • @hoangdv express 服务确实重启了几次,但还是出现连接错误

标签: node.js mongodb docker express docker-compose


【解决方案1】:

我认为您需要在配置中传递 dbName。

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; },
  );

【讨论】:

  • 谢谢,我已经尝试过了,但仍然遇到同样的错误。它在我的本地主机上运行良好,仅在 docker 容器中运行时出现连接错误
猜你喜欢
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2023-04-10
相关资源
最近更新 更多