Mi sono imbattuto in questo stesso problema. Ho un contenitore docker che esegue cron per eseguire periodicamente degli script di shell. Anch'io ho avuto difficoltà a scoprire perché i miei script funzionavano correttamente quando li eseguivo manualmente all'interno del contenitore. Ho provato tutti i trucchi per creare uno script di shell che sarebbe stato eseguito prima per impostare l'ambiente, ma non hanno mai funzionato per me (molto probabilmente ho fatto qualcosa di sbagliato). Ma ho continuato a cercare e ho trovato questo e funziona.
- Setup uno script di shell di partenza o punto di ingresso per il vostro contenitore cron
- Trasforma questa la prima linea per eseguire
printenv | grep -v "no_proxy" >> /etc/environment
Il trucco è il file /etc/environment
. Quando il contenitore è stato creato, quel file è vuoto, penso di proposito. Ho trovato un riferimento a questo file nelle pagine man per cron(8). Dopo aver esaminato tutte le versioni di cron, tutti sfuggono a un file /etc/?
che è possibile utilizzare per alimentare le variabili di ambiente ai processi figli.
Inoltre, si noti che ho creato il contenitore docker per eseguire cron in primo piano, cron -f
. Questo mi ha aiutato a evitare altri trucchi con tail
in esecuzione per mantenere il contenitore attivo.
Ecco il mio file entrypoint.sh come riferimento e il mio contenitore è un debian: immagine di base jessie.
printenv | grep -v "no_proxy" >> /etc/environment
cron -f
Inoltre, questo trucco ha lavorato anche con le variabili d'ambiente impostate durante docker run
comandi.
fonte
2017-01-30 14:19:44
Questo post sembra di rispondere alla domanda http://stackoverflow.com/questions/26822067/running-cron-python-jobs-within-docker – user2915097