2016-03-21 26 views
3

I giriş noktasında oluþturunuz docker içinde env-dosyadan değişkeni kullanmak istiyorum: bunu yapmak için herhangi bir yoluÇevre değişkenleri env fiile içinde girişnoktası liman işçisi-compose.yml

# environment.env 
    HOST=example.com 

    # docker-compose.yml 
    some_service: 
    ... 
    env_file: ['environment.env'] 
    entrypoint: ['myexecutable', '--host', '$HOST'] 

var mı? Sadece bir çözüm buldu:

# docker-compose.yml 
    some_service: 
    ... 
    env_file: ['environment.env'] 
    entrypoint: sh -c 'myexecutable --host $$HOST' 

Ama (2 süreçleri olacaktır çünkü: sh ve myexecutable) o liman işçisi anlayışı "konteyner başına bir süreci" ihlal görünüyor. Ve konteyner normal durmuyor, ben docker kill veya docker-compose kill ile öldürmek zorundayım.

cevap

1

ile liman işçisi-oluşturma dosya içinde kullanabilirsiniz işlem, tek işlem olarak ele alabilmek için sh -c 'exec myexecutable --host ...''u çalıştırabilirsiniz. "Her bir konteynır başına bir işlem" genellikle, bir işlem süpervizörü çalıştırmadığınız anlamına gelir. Bir sürecin başkalarına başlaması nadir değildir.

SIGTERM'de komutun çıkışından doğru şekilde çıkmak için, açık sinyal işleyicileri ayarlamanız gerekir. Bunu bash'ta veya uygulamanın kendisinde trap ile yapabilirsiniz. Ayrıca bkz. https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop

+0

Entrypoint 'exec myexecutable' benim için çalışmıyor:" Container komutu bulunamadı ya da mevcut değil "diyor. ; Dolambaçlı felsefe göre 'sh -c' exec myexecutable --host $$ HOST 'giriş noktası doğru çözüm olacak mı? –

+0

Üzgünüm, sh-c 'exec ...' ' – dnephin

0

Ben env dosya hakkında emin değilim, ama bu bir ortam değişkeni kabuk oturumunda zaten eğer sadece tek olmasını istiyorsanız, ${your_env_var_here}

+0

Soru, hizmetin yapılandırmasını depoladığı için, env dosyasıyla tam olarak ilgili ... –