Ubah perintah direktori di Docker?


214

Di buruh pelabuhan saya ingin melakukan ini:

git clone XYZ
cd XYZ
make XYZ

Namun karena tidak ada perintah cd, saya harus melewati path lengkap setiap saat (membuat XYZ / fullpath). Ada solusi bagus untuk ini?



6
Perintah WORKDIR dicatat sebagai solusi yang mungkin juga
trcarden

1
Bukan solusi, itu adalah solusi yang disarankan docs.docker.com/engine/userguide/eng-image/…
John John Pichler

Jawaban:


151

Anda dapat menjalankan skrip, atau parameter yang lebih kompleks ke RUN. Berikut adalah contoh dari Dockerfile yang saya unduh untuk melihat sebelumnya:

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

Karena penggunaan '&&', itu hanya akan sampai ke perintah 'pemasangan pipa' terakhir jika semua perintah sebelumnya telah berhasil.

Bahkan, karena setiap RUN membuat komit baru & (saat ini) lapisan AUFS, jika Anda memiliki terlalu banyak perintah di Dockerfile, Anda akan menggunakan batas, jadi menggabungkan RUN (ketika file stabil) dapat menjadi sangat hal yang berguna untuk dilakukan.


98
Jika Anda bertanya-tanya, efek dari cdhanya berlangsung untuk RUNperintah saat ini . Selanjutnya RUNakan dimulai dari saat ini WORKDIR.
Ritchie

531

Untuk mengubah ke direktori lain gunakan WORKDIR . Semua perintah RUN, CMD dan ENTRYPOINT setelah WORKDIR akan dieksekusi dari direktori itu.

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make

40
Menggunakan WORKDIR juga disebut-sebut sebagai praktik terbaik buruh pelabuhan
Martin Woolstenhulme

14
Saya percaya ini adalah jawaban yang lebih tepat untuk pertanyaan ini
Juan Leni

1
Perhatikan bahwa ini menciptakan banyak lapisan (saya pikir?)
Sebi

Ini harus menjadi jawaban yang diterima. Diuji dan dapat mengonfirmasi itu berfungsi
user1258361

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.