Развертывание docker / nodejs / mongodb: MongooseError [MongooseServerSelectionError]: истекло время ожидания соединения - PullRequest
0 голосов
/ 07 марта 2020

обновление 2

Я сталкиваюсь с другой ошибкой, если я использую путь следующим образом, я получу ошибку "Недопустимая спецификация тома" даже при изменении пути на "C: / docker -entrypoint-initdb.d / ", init-mon go. sh не будет выполнен, тогда я получаю" UserNotFound: Не удалось найти пользователя "xxxx" для db "admin"

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

поэтому я переключаюсь на linux контейнер, и все сообщения об ошибках пропадают.

update

Я решил проблему после отключения службы mongodb на локальном компьютере. host

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)

оригинал

Я использую docker windows контейнер на windows 10. После двух дней борьбы я все еще не могу успешно развернуть свой проект. Моя конфигурация следующая, спасибо за помощь ..

s erver. 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 -создать --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

1 Ответ

0 голосов
/ 07 марта 2020

Я думаю, вам нужно передать 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; },
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...