Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

393
Vistas
¿Cómo dar el número de puerto para el contenedor docker en tiempo de ejecución?

Escribí una API REST basada en HTTP de Scala y Akka y creé Dockerfile para crear una imagen de Docker para esta API. Mi Dockerfile es el siguiente:

 FROM maven:3.6.0-jdk-8-alpine AS MAVEN_TOOL_CHAIN COPY pom.xml /tmp/parent/ COPY data-catalogue/pom.xml /tmp/parent/data-catalogue/ COPY data-catalogue/src /tmp/parent/data-catalogue/src/ WORKDIR /tmp/parent/data-catalogue/ RUN mvn package FROM java:openjdk-8 COPY --from=MAVEN_TOOL_CHAIN /tmp/parent/data-catalogue/target/data-catalogue-1.0-SNAPSHOT.jar /opt/data-catalogue.jar COPY data-catalogue/src/main/resources/logback.xml /opt/logback.xml ENTRYPOINT ["java", "-Dlogging.config=/opt/logback.xml", "-jar", "/opt/data-catalogue.jar", "prod"] CMD ["8080"]

Todo está bien hasta ahora. Puedo ejecutar un contenedor usando esta imagen.

Ahora, el requisito es ejecutar dos contenedores usando esta imagen en el mismo host de Docker. Modifiqué la clase principal de las API REST de modo que tomará el número de puerto en el que debe ejecutarse como un argumento de línea de comando. Si no se proporciona el argumento de la línea de comandos, escuchará las solicitudes en el puerto 8080.

Me gustaría saber cómo proporciono un parámetro de línea de comando a mi API REST al iniciar el contenedor.

Por ejemplo:

  1. La primera instancia de la API REST debe iniciar/ejecutarse en el puerto 5555, por lo que este argumento 5555 debe llegar a la clase principal de la API REST
  2. La segunda instancia de la API REST debe iniciar/ejecutarse en el puerto 1111, por lo que este argumento 5555 debe llegar a la clase principal de la API REST

Intenté usar ENTRYPOINT y CMD para esto, pero mi argumento de la línea de comando simplemente no llega a la clase principal y la API REST comienza solo en el puerto 8080.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

A través de variables de entorno

En Dockerfile:

 ENV PORT 8080

Puede anular el env anterior en el cmd pasando -e por ejemplo

 docker run -d my_image -e "PORT=5555"

Consume el env en tu código de aplicación

Entonces, por ejemplo, si no proporciona env en el cmd, su código de aplicación recibirá 8080 como valor de PUERTO. Si anula el env en cmd, su código de aplicación recibirá 5555 como valor de PUERTO

over 4 years ago · Santiago Trujillo Denunciar

0

El mapeo de Docker PORT es su respuesta.

Dockerizar su API es exactamente lo contrario para proporcionarle a su API el puerto en el que desea ejecutarla cada vez. Eso es exactamente lo que no quieres hacer cuando vas por el camino de Docker.

Su API debería poder atender sus solicitudes a través de cualquier puerto que decida EXPOSE en su imagen acoplable, y luego, en tiempo de ejecución, solo necesita asignar cualquier puerto que desee desde su host al puerto interno de su API (que , dentro de su contenedor, estará siempre atendiendo al mismo puerto "interno".

Entonces... ¿cómo se ve?

 docker run -d --name api-1 -p 5555:8080 my/api

y luego...

 docker run -d --name api-2 -p 1111:8080 my/api

Ahora ambas instancias se ejecutan en su host y puede acceder a ambas, cada una con un puerto de host diferente (incluso cuando internamente usan el mismo número de puerto)

over 4 years ago · Santiago Trujillo Denunciar

0

puede configurar ARG en su contenedor:

 ARG MYPORT

luego exportarlo como:

 CMD [ $MYPORT ]

luego inicie su ventana acoplable de esta manera:

 export MYPORT=5000 ; docker run ....
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda