#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.