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"]