Докер создает MongoDB с помощью NodeJS с помощью yarn

#node.js #mongodb #docker #docker-compose #yarnpkg

Вопрос:

Я пытаюсь использовать docker compose для размещения в контейнерах node.js сервер и база данных mongodb. Я также пытаюсь использовать yarn в качестве менеджера пакетов. Мой проект написан на машинописном языке, и мой Mongodb используется в качестве сервиса для моего сервера.

Для того, что у меня есть на данный момент, это работает просто отлично, но я не уверен, что моя реализация даже хороша. Когда я бегу docker-compose up , контейнеры и изображения node.js и mongodb создаются, и контейнеры выполняются на указанных портах.

Проблема в том, что когда я убиваю контейнер mongodb, мой сервер nodejs все еще имеет доступ к базе данных, например, если мой контейнер mongodb все еще запущен. Я бы предположил, что это потому, что мой сервер mongodb также работает в том же контейнере, что и мой node.js сервер.

Это мой док-файл:

 FROM node:lts-alpine

ADD package.json /app/package.json
ADD yarn.lock /app/yarn.lock

WORKDIR /app

# Installing packages
RUN yarn

ADD . /app

ENV NODE_ENV=production

# Building TypeScript files
RUN yarn build

CMD ["node", "./dist/app.js"]
 

Это сценарии в моем файле package.json:

 "scripts": {
    "lint": "eslint src/**/*.ts",
    "format": "eslint src/**/*.ts --fix",
    "start": "tsc amp;amp; node --unhandled-rejections=strict ./dist/app.js",
    "debug": "export DEBUG=* amp;amp; npm run start",
    "test": "echo "Error: no test specified" amp;amp; exit 1",
    "dev": "ts-node src/app.ts",
    "build": "rm -rf build amp;amp; tsc -p ."
  },
 

А это мой файл docker-compose.yml:

 version: "3"

services:
  app:
    container_name: app
    restart: always
    build: 
      context: .
      dockerfile: Dockerfile
    env_file: .env
    volumes:
      - ./src:/app/src
    environment:
        - COSMOSDB_HOST=${COSMOSDB_HOST}
        - COSMOSDB_PORT=${COSMOSDB_PORT}
        - COSMOSDB_DBNAME=${COSMOSDB_DBNAME}
        - COSMOSDB_USER=${COSMOSDB_USER}
        - COSMOSDB_PASSWORD=${COSMOSDB_PASSWORD} 
    ports: 
      - "4000:4000" 
    links: 
      - mongo
  mongo:
    container_name: mongo
    image: mongo
    ports:
      - "27017:27017"
    volumes:
      - ./data:/data/db
 

Кажется, я не понимаю, что не так с моими файлами…
Вы не могли бы мне помочь? Кроме того, не могли бы вы дать мне какие-нибудь рекомендации по оптимизации сборки или что-нибудь еще ? Спасибо!

Комментарии:

1. Итак, как вы убиваете свой контейнер mongodb? docker-compose down в том же каталоге? Вы можете видеть весь запущенный контейнер с docker ps

2. docker container list , Я извлекаю идентификатор моего контейнера mongo и ввожу docker container kill <mongo-id>

3. Ну, вы просто не подключаетесь к остановленному или удаленному контейнеру, так что либо он не остановлен, либо вы ошибочно принимаете его за что-то другое, например, за свою облачную базу данных. (Попробуйте вытащить вилку Ethernet, это должен быть верный способ проверить эту теорию).

4. к чему вы COSMOSDB_HOST стремитесь?

5. COSMOSDB_HOST-это переменная, которую я установил для подключения к своей базе данных azure cosmos.