Come posso passare le variabili di ambiente ai contenitori Docker?




4 Answers

Puoi passare usando -e parametri con il comando docker run .. come menzionato here e come menzionato da @errata.
Tuttavia, l'eventuale svantaggio di questo approccio è che le credenziali verranno visualizzate nell'elenco dei processi, dove viene eseguito.
Per renderlo più sicuro, è possibile scrivere le proprie credenziali in un file di configurazione e eseguire la docker run con --env-file come indicato here . Quindi puoi controllare l'accesso a quel file di configurazione in modo che altri utenti che hanno accesso a quella macchina non vedano le tue credenziali.

docker environment-variables

Sono nuovo di Docker, e non è chiaro come accedere a un database esterno da un contenitore. È il modo migliore per codificare nella stringa di connessione?

# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string



Utilizzare -e o --env per impostare le variabili di ambiente (predefinito []).

Un esempio da uno script di avvio:

 docker run  -e myhost='localhost' -it busybox sh

Se si desidera utilizzare più ambienti dalla riga di comando, prima di ogni variabile di ambiente utilizzare il flag -e .

Esempio:

 sudo docker run -d -t -i -e NAMESPACE='staging' -e PASSWORD='foo' busybox sh

Nota: assicurati di inserire il nome del contenitore dopo la variabile di ambiente, non prima.

Se hai bisogno di impostare molte variabili, usa il flag --env-file

Per esempio,

 $ docker run --env-file ./my_env ubuntu bash

Per qualsiasi altro aiuto, consulta la guida di Docker:

 $ docker run --help

Documentazione ufficiale: https://docs.docker.com/compose/environment-variables/







Se si hanno le variabili d'ambiente in un env.sh localmente e si desidera configurarlo all'avvio del contenitore, si può provare

COPY env.sh /env.sh
COPY <filename>.jar /<filename>.jar
ENTRYPOINT ["/bin/bash" , "-c", "source /env.sh && printenv && java -jar /<filename>.jar"]

Questo comando avvia il contenitore con una shell bash (voglio una shell bash poiché source è un comando bash), env.sh file env.sh (che imposta le variabili di ambiente) ed esegue il file jar.

L' env.sh sembra così,

#!/bin/bash
export FOO="BAR"
export DB_NAME="DATABASE_NAME"

Ho aggiunto il comando printenv solo per verificare che il vero comando di origine printenv . Probabilmente dovresti rimuoverlo quando confermi che il comando source funziona bene o che le variabili di ambiente appaiono nei log della finestra mobile.




Related