2013-12-17 21 views
82

Trong Docker Tôi muốn làm điều này:Docker: thay đổi thư mục lệnh

git clone XYZ 
cd XYZ 
make XYZ 

Tuy nhiên vì không có lệnh cd, tôi phải vượt qua trong đường dẫn đầy đủ mọi (chắc XYZ/fullpath). Bất kỳ giải pháp tốt cho điều này?

+0

liên quan: http://stackoverflow.com/questions/17891669/docker-command-fails-during-build-but-succeeds-while-executed-within-running-co – trcarden

+2

lệnh workdir là được ghi nhận là giải pháp có thể có cũng như – trcarden

+0

Không phải giải pháp thay thế, đó là giải pháp được đề xuất https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#workdir –

Trả lời

54

Bạn có thể chạy tập lệnh hoặc tham số phức tạp hơn đối với RUN. Dưới đây là một ví dụ từ một Dockerfile Tôi đã tải xuống để nhìn vào trước đó:

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

Bởi vì việc sử dụng '& &', nó sẽ chỉ nhận được đến trận chung kết 'pips cài đặt' lệnh nếu tất cả các lệnh trước Đã thành công. Trong thực tế, vì mỗi RUN tạo ra một cam kết mới & (hiện tại) là một lớp AUFS, nếu bạn có quá nhiều lệnh trong Dockerfile, bạn sẽ sử dụng hết các giới hạn, vì vậy hãy hợp nhất các RUN (khi tệp được ổn định) có thể là một điều rất hữu ích để làm.

+6

Trong trường hợp bạn tự hỏi, hiệu ứng của 'cd' chỉ kéo dài cho lệnh' RUN' hiện tại. 'RUN' tiếp theo sẽ bắt đầu từ' WORKDIR' hiện tại. – Ritchie

234

Để chuyển sang sử dụng thư mục khác WORKDIR. Tất cả các lệnh RUN, CMD và ENTRYPOINT sau khi WORKDIR sẽ được thực hiện từ thư mục đó.

RUN git clone XYZ 
WORKDIR "/XYZ" 
RUN make 
+12

Sử dụng WORKDIR cũng được trích dẫn là một thực hành tốt nhất [dockerfile] (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#workdir) –

+2

Tôi tin rằng đây là câu trả lời phù hợp hơn cho câu hỏi – purpletentacle

Các vấn đề liên quan