Pregunta Usar variables de entorno en CMD


¿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 docker run mando. 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.


58
2018-04-14 22:00


origen


Respuestas:


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.

Puedes probar el CMD sin la sintaxis de matriz para ejecutar como un shell:

CMD myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT

37
2018-06-12 21:37



CMD ["sh", "-c", "echo ${MY_HOME}"]

Respuesta de sffits aquí.


11
2018-06-21 09:12



Ambos Andys lo tenían bien. La sintaxis json pasa por alto el punto de entrada. Cuando usa 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.


10
2018-06-20 16:39



No puedo hablar de cómo es supuesto para trabajar, pero creo que si llamaras esto como un script de shell, p. CMD runmyserver.sh, entonces la interpretación de las variables del intérprete de órdenes se aplazaría hasta que realmente se ejecutara el CMD.

Entonces, prueba

myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT`` 

como un script de shell?


7
2018-04-14 23:19