Problems with docker nodejs app exit code 137

33 Views Asked by At

I'm trying to develop a full-stack app with nodejs, react-native, expo and docker and when I try to make docker-compose down or docker-compose stop I get as status Exited(137) in frontend and backend but no in database and I don't understand why is this happening, I want the 3 of them finish correctly with status 0, here is my docker-compose and my dockerfiles:

docker-compose.yml:

version: '3.8'

services:
  back:
    build: ./backend # Esto le dice a Docker Compose dónde encontrar el Dockerfile (en el directorio actual)
    ports:
      - "3000:3000" # Mapea el puerto 3000 del contenedor al puerto 3000 de tu máquina local
    environment:
      - NODE_ENV=development # O cualquier otra variable de entorno que necesites
    volumes:
      - ./backend:/app
      - /app/node_modules
    depends_on:
      database:
        condition: service_healthy

  database:
      image: mysql:8.0.36
      #volumes: 
      #  - database:/data/db
      volumes:
      - ./backend/data/create_table.sql:/docker-entrypoint-initdb.d/create_table.sql
      ports:
        - 3306:3306
        - 33060:33060
      environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=prueba
        - MYSQL_USER=user
        - MYSQL_PASSWORD=user
      healthcheck:
        test: ["CMD-SHELL", "mysql --user=user --password=user --database=prueba -e 'SELECT 1'"]
        interval: 10s
        timeout: 5s
        retries: 5
        start_period: 10s
  
  front:
    build: ./frontend
    volumes:
      - ./frontend:/app
      - /app/node_modules
    stdin_open: true # Equivalente a -i en docker run
    tty: true        # Equivalente a -t en docker run
    ports:
      - "8081:8081"
      - "19000:19000"
      - "19001:19001"
      - "19002:19002"
    environment:
      - NODE_ENV=development
      - EXPO_DEVTOOLS_LISTEN_ADDRESS=0.0.0.0
      - CHOKIDAR_USEPOLLING=true
    depends_on:
      - back

backend dockerfile:

# Elegir la versión de node.js a utilizar
FROM node:18-alpine3.19

# Establecer el directorio de trabajo en el contenedor
WORKDIR /app

# Copiar los archivos de configuración del proyecto (`package.json` y, opcionalmente, `package-lock.json`) al directorio de trabajo
COPY package*.json ./

# Instalar las dependencias del proyecto
RUN npm install

# Copiar el resto de los archivos del proyecto al directorio de trabajo
COPY . .

# Exponer el puerto en el que se ejecutará la aplicación
EXPOSE 3000

# Iniciar la app
CMD ["npm", "start"]

frontend dockerfile:

# Usamos la imagen base de Node.js
FROM node:18-alpine3.19

# Configura el directorio de trabajo dentro del contenedor
WORKDIR /app

# Copia el archivo package.json y package-lock.json (si existe)
COPY package*.json ./

# Instala las dependencias del proyecto
RUN npm install

# Copia los archivos del proyecto al contenedor
COPY . .

# Expo CLI utiliza el puerto 19000 por defecto
EXPOSE 8081
EXPOSE 19000
EXPOSE 19001
EXPOSE 19002

# Comando para iniciar la aplicación Expo
CMD ["npx", "expo", "start", "--tunnel"]

and my backend code just to show i don't have nothing implemented yet that may cause any problem:

const initDatabase = require('./data/sincro');
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send("Hola Mundoooo!");
});




// Manejar las señales de finalización del programa
process.on('SIGTERM', () => {
  console.log('SIGTERM signal received. Exiting.');
  server.close();
  process.exit(0);
});

process.on('SIGINT', () => {
  console.log('SIGINT signal received. Exiting.');
  server.close();
  process.exit(0);
});

// Inicializar la base de datos y luego iniciar el servidor
initDatabase().then(() => {
  server = app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
  });
});

I tried using init:true or tini in my dockerfiles but nothing works also handling the signals but in my local machine work everything correctly but no with docker

0

There are 0 best solutions below