Когда ваш Dockerfile заканчивается на CMD ["npm", "start"]
, он создает образ, который запускает ваше приложение вместо , выполняющего базу данных.
Запуск двух вещей в одном контейнере немного сложен и обычно не считается лучшей практикой. (Вы изменяете код своего приложения, чтобы создать новый образ, а также удалить и воссоздать существующий контейнер. Вы действительно хотите одновременно остановить и удалить свою базу данных?) Вам следует запустить это как два отдельных контейнера, один из которых работает со стандартным * Изображение 1006 * и второе, основанное на Dockerfile, аналогичном этому, но FROM node
. Вы можете рассмотреть Docker Compose как простой инструмент оркестровки, который может управлять обоими контейнерами вместе.
Еще одна вещь, которая отсутствует в вашем примере, - это любая конфигурация, которая сообщает приложению, где находится его база данных. В Docker это почти никогда не бывает localhost
(«этот контейнер», , а не «этот физический хост где-то»). Вы должны добавить элемент управления для передачи этого имени хоста в качестве переменной среды. В Docker Compose вы можете указать имя блока services:
, в котором работает база данных.
version: '3'
services:
mongodb:
image: mongodb:4
volumes:
- './mongodb:/data/db'
app:
build: .
ports: '3000:3000'
env:
MONGODB_HOST: mongodb
(https://hub.docker.com/_/mongo стоит прочитать подробно.)