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.

¿Cómo se puede golpear un punto final HTTP desde una imagen de Docker?

Tengo una aplicación de NodeJS/TypeScript (repositorio en GitHub) que funciona correctamente cuando ejecuto el script definido en package.json, es decir, “npm run start” iniciará mi host local y puedo acceder al endpoint a través de POSTMAN.

He creado una imagen de Docker (soy nuevo en Docker y esta es mi primera imagen). Aquí, estoy obteniendo el error “Error: connect ECONNREFUSED 127.0.0.1:7001” en POSTMAN.

Me di cuenta de que no veo el mensaje “Listening on port 7001” en la terminal cuando ejecuto el archivo de Docker. Esto me indica que estoy cometiendo algún error en el archivo .Dockerfile.

Pasos:
– He creado la imagen de Docker usando “docker build -t .”. Puedo ver que se ha creado la imagen correctamente.
– He lanzado el contenedor usando “docker run –name
– También he desactivado la configuración “Use the system proxy” en POSTMAN pero no he tenido suerte.

Detalles:

  • Archivo package.json:
"scripts": {
    "dev": "ts-node-dev --respawn --pretty --transpile-only src/server.ts",
    "compile": "tsc -p .",
    "start": "npm run compile && npm run dev"
}
  • Respuesta desde la terminal cuando ejecuto “npm run start” (esto es exitoso):

Imagen

  • Dockerfile:
FROM node:12.0.0

COPY . /app 

WORKDIR /app

RUN npm install
RUN npm install -g typescript

EXPOSE 7001

CMD ["npm", "start"]
  • Respuesta después de ejecutar el comando de Docker:

Imagen

  • Estructura del repositorio de GitHub:

Imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema aquí probablemente se deba al hecho de que el puerto dentro del contenedor no está correctamente mapeado a la máquina principal. Cuando se lanza el contenedor, necesita estar mapeado al puerto en el que la aplicación está escuchando dentro del contenedor (en este caso, puerto 7001).

    Para hacer esto, actualice el comando docker run agregando la bandera -p para especificar el mapeo de puertos de la siguiente manera:

    docker run --name <nombre-contenedor> -p 7001:7001 <nombre-imagen>
    

    Esto mapeará el puerto 7001 dentro del contenedor al puerto 7001 en la máquina principal. Una vez hecho esto, debería poder acceder al punto final a través de POSTMAN utilizando `http://localhost:7001`.

    Además, se recomienda incluir la bandera --rm en el comando docker run para eliminar automáticamente el contenedor cuando se cierre, de la siguiente manera:

    docker run --name <nombre-contenedor> -p 7001:7001 --rm <nombre-imagen>
    

    Esto mantendrá su sistema limpio y evitará la acumulación de contenedores no utilizados.

Comments are closed.