2014-04-14 25 views
53

È possibile utilizzare variabili di ambiente nella stanza di CMD in un file Docker?Utilizzare le variabili di ambiente in CMD

voglio fare qualcosa di simile:

CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"] 

Dove $ MEMCACHE_11211_TCP_ * verrebbe impostato automaticamente con l'inserimento del parametro --link del mio comando docker run. E $ ARG sarebbe configurabile dall'utente in fase di runtime, magari con il parametro "-e"?

Questo non sembra funzionare per me, sembra che stia letteralmente passando attraverso la stringa "$ ARG" per esempio.

risposta

5

Non riesco a parlare a come è supposto di funzionare, ma penso che se si chiama questo come uno script di shell, ad es. CMD runmyserver.sh, quindi l'interpretazione delle variabili di shell verrà differita fino all'esecuzione effettiva del CMD.

Quindi, cercare

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

come uno script di shell?

32

Questa risposta potrebbe essere un po 'in ritardo. Ma l'ambiente per CMD viene interpretato in modo leggermente diverso a seconda di come si scrivono gli argomenti. Se si passa il CMD come una stringa (non all'interno di un array), viene lanciato come shell anziché come exec. Vedi https://docs.docker.com/engine/reference/builder/#cmd.

Puoi provare il CMD senza la sintassi di matrice per l'esecuzione come un guscio:

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

Entrambi Andys aveva ragione. La sintassi json ignora il punto di accesso. Quando si utilizza CMD come nell'esempio, viene considerato come argomento per il punto di passaggio predefinito: /bin/sh -c che interpreterà le variabili di ambiente.

Docker non valuta le variabili in CMD in entrambi i casi. Nel primo caso, il comando viene chiamato direttamente, quindi nulla viene interpretato, in seguito le variabili vengono interpretate da sh.

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

Risposta da sffoni here.

Problemi correlati