Tengo una aplicación de servidor-api.
En mi host local, solo necesito 2 comandos para iniciar la aplicación:
No más, y funciona perfecto en el puerto 3000.
Estoy tratando de dockerizar mi servidor para iniciarlo con docker-compose.
Ok, este es mi dockerfile:
FROM node:14-alpine AS development ENV NODE_ENV development WORKDIR /app COPY package.json . COPY package-lock.json . RUN npm install COPY . . EXPOSE 3000 CMD ["npm", "start"]Lanzo el comando build para construir la imagen:
docker build --tag server-api .Y cuando termina, ejecuto el contenedor:
docker run -p 80:3000 server-apiLos registros son perfectos, dice que se está ejecutando en el puerto 3000 y que debo conectarme a localhost: 3000 para revisar mi aplicación server-api.
Pero, entiendo que ese es el puerto del contenedor, tuve que lanzar el contenedor con el comando -p 80:3000, así que reviso el puerto 80 de mi computadora... pero no pasa nada.
¿Cuál debería ser mi solución de problemas?
Ya intenté obtener información sobre la conexión con mi contenedor:
docker exec -it <container_id> shPero todo se ve perfecto y es una aplicación simple.
¿Qué estoy haciendo mal?
Como dice @ErikMD, todas las aplicaciones de back-end deben escuchar la IP especial 0.0.0.0 para ser dockerizadas (este problema no ocurre con React).
Necesito leer esta publicación: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/
Y para resolver mi problema verifico cómo cambiar localhost a 0.0.0.0 como host.
De forma predeterminada, mi host era localhost.
Entonces, cambio esto en mi paquete.json:
"scripts": { "start": "json-server --watch db.json" },Para esto:
"scripts": { "start": "json-server --host 0.0.0.0 --port 8080 --watch db.json" },Y ahora por fin funciona perfecto.