tag run library imagenes hub example dockers container docker dockerfile

run - dockers container download



¿Cómo uso la variable de entorno Docker en la matriz ENTRYPOINT? (3)

Después de mucho dolor y gran ayuda de @vitr et al., Decidí probar

  • sustitución de bash estándar
  • forma de concha de ENTRYPOINT (gran consejo desde arriba)

Y eso funcionó.

ENV LISTEN_PORT="" ENTRYPOINT java -cp "app:app/lib/*" hello.Application --server.port=${LISTEN_PORT:-80}

p.ej

docker run --rm -p 8080:8080 -d --env LISTEN_PORT=8080 my-image

y

docker run --rm -p 8080:80 -d my-image

ambos configuraron el puerto correctamente en mi contenedor

Refs

ver https://www.cyberciti.biz/tips/bash-shell-parameter-substitution-2.html

Si configuro una variable de entorno, digamos ENV ADDRESSEE=world , y quiero usarlo en el script de punto de entrada concatenado en una cadena fija como:

ENTRYPOINT ["./greeting", "--message", "Hello, world!"]

con el world como el valor de la variable medioambiental, ¿cómo lo hago? Intenté usar "Hello, $ADDRESSEE" pero eso no parece funcionar, ya que literalmente toma el $ADDRESSEE .


Estás utilizando la forma ejecutiva de ENTRYPOINT. A diferencia del formulario de shell , el formulario exec no invoca un shell de comando. Esto significa que el procesamiento de shell normal no ocurre. Por ejemplo, ENTRYPOINT [ "echo", "$HOME" ] no realizará la sustitución de variables en $ HOME. Si desea el procesamiento de shell, utilice el formulario de shell o ejecute un shell directamente, por ejemplo: ENTRYPOINT [ "sh", "-c", "echo $HOME" ] .
Cuando se usa el formulario exec y se ejecuta un shell directamente, como en el caso del formulario de shell, es el shell el que está haciendo la expansión de la variable de entorno, no docker. ( De la referencia de Dockerfile )

En su caso, usaría la forma de shell

ENTRYPOINT ./greeting --message "Hello, $ADDRESSEE/!"


Traté de resolver con la respuesta sugerida y todavía encontré algunos problemas ...

Esta fue una solución a mi problema:

ARG APP_EXE="AppName.exe"
ENV _EXE=${APP_EXE}

# Build a shell script because the ENTRYPOINT command doesn''t like using ENV
RUN echo "#!/bin/bash /n mono ${_EXE}" > ./entrypoint.sh
RUN chmod +x ./entrypoint.sh

# Run the generated shell script.
ENTRYPOINT ["./entrypoint.sh"]

Dirigido específicamente a su problema:
RUN echo "#!/bin/bash /n ./greeting --message ${ADDRESSEE}" > ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]