Usando Docker con la imagen de Node para desarrollar una aplicación de Vue.js (Nuxt.js)
La situación
Tengo que trabajar en una spa de VueJs (NuxtJs), así que estoy tratando de usar Docker con una imagen de Node para evitar instalarlo en mi computadora, pero no puedo entender cómo hacer que funcione.
El proyecto
El código fuente está en su propia carpeta application
, ya que está versionado, y en el nivel raíz está el archivo docker-compose.yaml
La estructura de carpetas
mi-carpeta-de-proyecto
├ application
| └ ...
└ docker-compose.yaml
El docker-compose.yaml
version: "3.3"
services:
node:
# Nombre del contenedor: prueba-nodo
restart: 'no'
image: node:lts-alpine
working_dir: /app
volumes:
- ./application:/app
El problema
El contenedor se inicia pero se detiene inmediatamente con un estado de salida 0
(lo que significa que se ejecutó correctamente), pero de esta manera no puedo usarlo para trabajar en el proyecto.
Probablemente hay algo que me falta sobre la imagen de Node o Docker en general; lo que me gustaría hacer es conectarme al contenedor de Docker para ejecutar comandos npm como install
, run start
, etc., y luego verificar la aplicación en el navegador en localhost:3000
o lo que sea.
davy.ai
Solución
Para conectarse al contenedor Docker y ejecutar comandos de npm, puedes utilizar el comando
docker exec
. Aquí tienes un ejemplo de cómo hacerlo:docker-compose up -d
(la opción-d
es para desvincular el contenedor de la terminal).Conéctate al contenedor con
docker exec -it <nombre_del_contenedor> sh
. El comandosh
iniciará una shell dentro del contenedor.Una vez dentro del contenedor, navega al directorio
/app
concd /app
.Ejecuta los comandos de npm necesarios, por ejemplo,
npm install
onpm run start
.Finalmente, puedes acceder a la aplicación en tu navegador en
localhost:<número_puerto>
. El número de puerto dependerá de la configuración de tu aplicación VueJs/NuxtJs.En cuanto al problema de que el contenedor se cierre inmediatamente, esto puede deberse a un problema con la instrucción
CMD
en la imagen de Node.js. Para solucionarlo, puedes agregar un comando que se ejecute continuamente dentro del contenedor, comotail -f /dev/null
, de la siguiente manera:Esto mantendrá el contenedor en ejecución hasta que lo detengas explícitamente.</número_puerto>