Search code examples
node.jsdockerdocker-composemean-stackdocker-network

Running a container stops another container


I've created two basic MEAN stack apps with a common database (mongo db). I've also built docker for these apps.

Problem:

When i start a mean stack container(example-app-1) using

docker-compose up -d --build

The container runs smoothly and I'm also able to hit the container and view my page locally.

When i try to start another mean stack container(example-app-2) using

docker-compose up -d --build

my previous container is stopped and the current container works without any flaw.

Required:

I want both these containers to run simultaneously using a shared database. I need help in achieving this.

docker-compose.yml Example app -1

version: '3'

services:
  example_app_1:
    build:
      dockerfile: dockerfile
      context: ../../
    image: example_app_1:1.0.0

  backend:
    image: 'example_app_1:1.0.0'
    working_dir: /app/example_app_1/backend/example-app-1-api
    environment:
      - DB_URL=mongodb://172.17.0.1:27017/example_app_1
      - BACKEND_PORT=8888
      - BACKEND_IP=0.0.0.0
    restart: always
    ports:
      - '8888:8888'
    command: ['node', 'main.js']
    networks: 
      - default
    expose:
      - 8888
  frontend:
    image: 'example_app_1:1.0.0'
    working_dir: /app/example_app_1/frontend/example_app_1
    ports:
      - '5200:5200'
    command: ['http-server', '-p', '5200', '-o', '/app/example_app_1/frontend/example-app-1']
    restart: always
    depends_on:
      - backend
networks:
  default:
    external:
      name: backend_network

docker-compose.yml for Example app 2

version: '3'

services:
  example-app-2:
    build:
      dockerfile: dockerfile
      context: ../../
    image: example_app_2:1.0.0

  backend:
    image: 'example-app-2:1.0.0'
    working_dir: /app/example_app_2/backend/example-app-2-api
    environment:
      - DB_URL=mongodb://172.17.0.1:27017/example_app_2
      - BACKEND_PORT=3333
      - BACKEND_IP=0.0.0.0
    restart: always
    networks:
      - default
    ports:
      - '3333:3333'
    command: ['node', 'main.js']

    expose:
      - 3333
  frontend:
    image: 'example-app-2:1.0.0'
    working_dir: /app/example_app_2/frontend/example-app-2
    ports:
      - '4200:4200'
    command: ['http-server', '-p', '4200', '-o', '/app/example_app_2/frontend/example-app-2
    restart: always
    depends_on:
      - backend
networks:
  default:
    external:
      name: backend_network

enter image description here


Solution

  • docker-compose will create containers named project_service. The project, by default, comes from the last component of the directory. So when you start the second docker-compose, it will stop the containers with those names, and start new ones.

    Either move these two docker-compose files to separate directories so the container names are different, or run docker-compose with --project-name flag containing separate project names so the containers can be started with different names.