Связывание существующего контейнера mon go db с контейнером nodejs - PullRequest
0 голосов
/ 16 апреля 2020

Привет всем, у меня есть эта проблема, когда я пытаюсь получить доступ к существующей базе данных mongodb внутри контейнера из другого контейнера, где у меня есть приложение nodejs, чтобы получить данные и показать их на моем простом nodejs применение. Я новичок в docker и docker, я провел некоторое исследование и обнаружил, что мне нужно создать сеть, чтобы два контейнера могли работать вместе. я также узнал кое-что об использовании external_links в моем docker -compose файле, но по какой-то причине это не сработало. вот мой код приложения вместе с Dockerfile и docker -композитным файлом, который я использовал:

Dockerfile:

FROM node:8
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
COPY package*.json ./
RUN npm install
# Copy app source code
COPY . .

#Expose port and start application
EXPOSE 3000
CMD [ "npm", "start" ]

docker -compose:


version: "3"
services:
  app:
    container_name: test-mongo-app
    restart: always
    build: .
    ports:
      - "80:3000"
    external_links:
      - crawlab_mongo_1:mongo

мой сервер. js файл:

const express = require("express");
const app = express();
const connectDb = require("./src/connection");
const Book = require("./src/Book.model");
const PORT = 3000;

app.get("/books", async (req, res) => {
  const books = await Book.find();
  res.json(books);
});

app.listen(PORT, function () {
  console.log(`Listening on ${PORT}`);

  connectDb().then(() => {
    console.log("MongoDb connected");
  });
});

Я также создал папку sr c внутри нее, я поместил модели и файлы подключения:

// Book.model.js
const mongoose = require("mongoose");
const bookSchema = new mongoose.Schema({
  title: {
    type: String,
  },
  url: {
    type: String,
  },
  price: {
    type: String,
  },
  description: {
    type: String,
  },
});
const Book = mongoose.model("Book", bookSchema);
module.exports = Book;
// connection.js
const mongoose = require("mongoose");
const Book = require("./Book.model");
const connection = "mongodb://mongo:27017/crawlab_test/resultbook";
const connectDb = () => {
  return mongoose.connect(connection);
};
module.exports = connectDb;

это то, что docker ps показывает:

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS               NAMES
400ffba07128        tikazyq/crawlab:latest   "/bin/bash /app/dock…"   19 hours ago        Up 6 hours                              master
0307983929e8        tikazyq/crawlab:latest   "/bin/bash /app/dock…"   19 hours ago        Up 6 hours                              worker
7f9e52a24fa1        mongo:latest             "docker-entrypoint.s…"   19 hours ago        Up 6 hours                              crawlab_mongo_1
1261542f2b08        redis:latest             "docker-entrypoint.s…"   19 hours ago        Up 6 hours                              crawlab_redis_1

Контейнер mongodb, к которому я пытаюсь получить доступ через мое приложение nodejs, это контейнер crawlab_mongo_1, этот контейнер имеет базу данных mongodb, которую я пытаюсь продемонстрировать в моем приложении nodejs с помощью оболочки. Вот что я получаю, получая доступ к оболочке контейнера и показывая базы данных:

> show dbs
admin         0.000GB
config        0.000GB
crawlab_test  0.017GB
local         0.000GB

crawlab_test - это база данных, в которой я заинтересован, и содержит коллекции, которые я хочу использовать. наконец, вот что показывает команда docker network ls:

NETWORK ID          NAME                   DRIVER              SCOPE
4f7c8404071c        bridge                 bridge              local
87d536466749        crawlab_default        bridge              local
97aa3687f3bc        docker_gwbridge        bridge              local
3fc129b42d3e        host                   host                local
7060907ad8c3        mongonet               bridge              local
11f3a44857a7        myapp_default          bridge              local
941c50f36fac        none                   null                local
d196d1031fef        testmongoapp_default   bridge              local

testmongoapp и crawlab_default - это два контейнера, которые необходимо связать.

я надеюсь, что это было ясно и понятно, и Заранее благодарю всех, кто может мне помочь с этой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...