Привет всем, у меня есть эта проблема, когда я пытаюсь получить доступ к существующей базе данных 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 - это два контейнера, которые необходимо связать.
я надеюсь, что это было ясно и понятно, и Заранее благодарю всех, кто может мне помочь с этой проблемой.