es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    1. Inicia el contenedor con docker-compose up -d (la opción -d es para desvincular el contenedor de la terminal).
    2. Conéctate al contenedor con docker exec -it <nombre_del_contenedor> sh. El comando sh iniciará una shell dentro del contenedor.

    3. Una vez dentro del contenedor, navega al directorio /app con cd /app.

    4. Ejecuta los comandos de npm necesarios, por ejemplo, npm install o npm run start.

    5. 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, como tail -f /dev/null, de la siguiente manera:

    services:
      node:
        # container_name: prova_node
        restart: 'no'
        image: node:lts-alpine
        command: tail -f /dev/null # <---- Agrega esta línea
        working_dir: /app
        volumes:
          - ./application:/app
    

    Esto mantendrá el contenedor en ejecución hasta que lo detengas explícitamente.</número_puerto>

Comments are closed.