Docker'da dizin komutu değiştirilsin mi?


214

Docker'da bunu yapmak istiyorum:

git clone XYZ
cd XYZ
make XYZ

Ancak cd komutu olmadığı için her zaman tam yoldan geçmem gerekiyor (XYZ / fullpath yap). Bunun için iyi çözümler var mı?



6
WORKDIR komutu da olası bir çözüm olarak not edildi
trcarden

1
Geçici bir çözüm değil, önerilen çözüm docs.docker.com/engine/userguide/eng-image/…
John John Pichler

Yanıtlar:


151

RUN için bir komut dosyası veya daha karmaşık bir parametre çalıştırabilirsiniz. Daha önce bakmak için indirdiğim bir Dockerfile'dan bir örnek:

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip

'&&' kullanımı nedeniyle, yalnızca önceki tüm komutlar başarılı olursa son 'pip install' komutuna ulaşır.

Aslında, her RUN yeni bir komut ve (şu anda) bir AUFS katmanı oluşturduğundan, Dockerfile'da çok fazla komutunuz varsa, sınırları kullanacaksınız, böylece RUN'ları birleştirmek (dosya kararlı olduğunda) çok yararlı bir şey.


98
Merak ederseniz, cdsadece RUNkomutun etkisi geçerli komut için sürer . Bir sonraki RUNakımdan başlayacaktır WORKDIR.
Ritchie

531

Başka bir dizine geçmek için WORKDIR kullanın . WORKDIR sonrası tüm RUN, CMD ve ENTRYPOINT komutları bu dizinden yürütülür.

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make


14
Bu sorunun daha uygun bir cevap olduğuna inanıyorum
Juan Leni

1
Bunun birden fazla katman oluşturduğunu unutmayın (sanırım?)
Sebi

Bu kabul edilen cevap olmalı. Test edildi ve çalıştığını onaylayabilir
user1258361

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.