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?

RParadox
sumber
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.

Alister Bulman
sumber
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
Javier Castellanos
sumber
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
43
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make
alfonsoolavarria
sumber