5

inşa oluşturan iki bağımsız değişkenleri kullanan bir Dockerfile:Dockerfile geçiş ortamları yazdım

FROM jessie 
MAINTAINER Zeinab Abbasimazar 
#Build Arguments 
ARG REP_USER 
ARG REP_PASS 
# Build 
RUN echo 'REP_USER:'$REP_USER', REP_PASS:'$REP_PASS 

Ben yapı için bir docker-compose.yml yazdı: Ben bu argümanlar tanımlamak istemiyorum

version: "2" 
services: 
    ui: 
    build: 
     context: . 
     dockerfile: Dockerfile 
     args: 
     REP_USER: $REP_USER 
     REP_PASS: $REP_PASS 

doğrudan dolaşık dosyasında, docker oluşturma sırasında bunları göndermeyi denedim:

Hangisi işe yaramadı? Bu argümanları çevre değişkenleri olarak kullanmak için Dockerfile değiştirdim;

FROM jessie 
MAINTAINER Zeinab Abbasimazar 
# Build 
RUN echo 'REP_USER:'$REP_USER', REP_PASS:'$REP_PASS 

Ve docker-compose.yml: ben ARG satırları kaldırıldı

version: "2" 
    services: 
    ui: 
     build: 
     context: . 
     dockerfile: Dockerfile 

Ve REP_USER=myusername REP_PASS=mypassword docker-compose build koştu; Hala sonuç yok.

Ben de bir env dosyasına bu bilgileri kaydetmek için çalıştı:

version: "2" 
services: 
    ui: 
    build: 
     context: . 
     dockerfile: Dockerfile 
    env_file: 
     - myenv.env 

Ama yapı anda etkilemez env dosyaları görünüyor; Onlar sadece çalışma zamanına katılıyorlar.

DÜZENLEME 1:

Docker sürüm --build-arg ile geçen argümanları desteklemez 1.12.6 olduğunu.

DÜZENLEME 2:

ben tarif here olarak .env dosyasını kullanarak çalıştı: Sonra docker-compose config denilen

cat .env 
REP_USER=myusername 
REP_PASS=mypassword 

döndürdü: Bu sorunumu çözdü demektir

networks: {} 
services: 
    ui: 
    build: 
     args: 
     REP_PASS: mypassword 
     REP_USER: myusername 
     context: /home/zeinab/Workspace/ZiZi-Docker/Test/test-exec-1 
     dockerfile: Dockerfile 
version: '2.0' 
volumes: {} 

.

DÜZENLEME 3:

Ben de docker-compose.yml dosyada docker-compose arg documentation üçüncü bölümü denedik: infaz

version: "2" 
services: 
    ui: 
    build: 
     context: . 
     dockerfile: Dockerfile 
     args: 
     - REP_USER 
     - REP_PASS 

Ve:

export REP_USER=myusername;export REP_PASS=mypassword;sudo docker-compose build --no-cache 

Hala istenen netice elde edilmezse. here açıklandığı gibi

cevap

0

. Ben de soruya değindim. İlk önce başarısızlıkla denedim, daha sonra .env dosya adında bir yazım hatası olduğunu öğrendim; .evn idi.

ben tarif here olarak .env dosyasını kullanarak çalıştı:

networks: {} 
services: 
    ui: 
    build: 
     args: 
     REP_PASS: mypassword 
     REP_USER: myusername 
     context: /home/zeinab/Workspace/ZiZi-Docker/Test/test-exec-1 
     dockerfile: Dockerfile 
version: '2.0' 
volumes: {} 

bu sorunumu çözdü Anlamı:

cat .env 
REP_USER=myusername 
REP_PASS=mypassword 

Sonra döndü docker-compose config aradı. this answer'un gerçekten yardımcı olduğunu söylemeliyim.

4

Sen oluşturmak docker ile argümanlar inşa ayarlayabilirsiniz:

docker-compose build [--build-arg key=val...] 
docker-compose build --build-arg REP_USER=myusername --build-arg REP_PASS=mypassword 

Btw AFAIK inşa argümanlar kullanılabilirlik ve deterministik bina arasında bir uzlaşma vardır. Docker deterministik bir şekilde inşa etmeyi amaçlamaktadır. Yani, nerede oluşturursanız oluşturduğunuz görüntü aynı olmalıdır. Bu nedenle, istemcinin yürütüldüğü ortamı (değişkenler) yok sayması mantıklı görünmektedir.

+0

Docker sürümüm, bunu desteklemeyen "1.12.6". –

+0

Kötü için. Güncelleme seçeneği yok mu? "Normal" bir Linux'ta 'docker-compose'un yeni bir sürümünü' $ HOME/bin' içine koyabilirsiniz ve sistem varsayılanı yerine çalıştırılmalıdır. – fzgregor

+0

Güncellemenin mümkün olup olmadığını kontrol edeceğim; tüm iş yaklaşımları ofiste benim kontrolümde değil. –

0

Docker-compose dosyasındaki değişken değiştirme için doğru sözdizimi {VARNAME} $ 'dır. Bu bir deneyin : Sonunda çözüm bulundu

version: "2" 
    services: 
    ui: 
     build: 
     context: . 
     dockerfile: Dockerfile 
     args: 
     REP_USER: ${REP_USER} 
     REP_PASS: ${REP_PASS} 
+0

benim için çalışmadı –