environment-variables - see - ubuntu environment variables for all users
Usar variables de entorno en CMD (4)
¿Puedo usar variables de entorno en mi stanza CMD en un Dockerfile?
Quiero hacer algo como esto:
CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]
Donde $ MEMCACHE_11211_TCP_ * se establecerá automáticamente mediante la inclusión del parámetro --link de mi comando de docker run
de la ventana docker run
. Y $ ARG sería configurable por el usuario en tiempo de ejecución, ¿tal vez por el parámetro "-e"?
Esto no parece funcionar para mí, parece estar pasando literalmente por la cadena "$ ARG", por ejemplo.
Ambos Andys lo tenían bien. La sintaxis json pasa por alto el punto de entrada. Cuando utiliza CMD como en su ejemplo, se considera como un argumento para el punto de entrada predeterminado: /bin/sh -c
que interpretará las variables de entorno.
Docker no evalúa las variables en CMD en ningún caso. En el primero, el comando se llama directamente para que no se interprete nada, en el último, las variables son interpretadas por sh
.
Esta respuesta puede ser un poco tarde. Pero el entorno para CMD
se interpreta de forma ligeramente diferente según cómo se escriban los argumentos. Si pasa el CMD
como una cadena (no dentro de una matriz), se lanza como un shell en lugar de como un exec. Ver https://docs.docker.com/engine/reference/builder/#cmd .
Puede probar el CMD
sin la sintaxis de matriz para ejecutarlo como un shell:
CMD myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT
No puedo hablar de cómo se supone que funciona, pero creo que si CMD runmyserver.sh
esto como un script de shell, por ejemplo, CMD runmyserver.sh
, entonces la interpretación de las variables del shell se aplazaría hasta que el CMD realmente se ejecutara.
Entonces, prueba
myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT``
como un script de shell?
CMD ["sh", "-c", "echo ${MY_HOME}"]
Respuesta de sffits here .