2016-06-09 12 views
12

Có cách nào để sao chép nhiều thư mục trong một lệnh, để giảm số lượng lớp không? Ví dụ, thay vì:Sao chép nhiều thư mục bằng một lệnh

COPY dirone ./dirone 
COPY dirtwo ./dirtwo 
COPY dirthree ./dirthree 

tôi muốn làm:

COPY dirone/ dirtwo/ dirthree/ ./ 

Tuy nhiên, bản sao này nội dung các thư mục ... nhưng tôi muốn sao chép các thư mục mình.

Trả lời

9

Đó là hành vi ghi nhận của lệnh sao chép:

Nếu <src> là một thư mục, toàn bộ nội dung của thư mục được sao chép, bao gồm siêu dữ liệu hệ thống tập tin.

Lưu ý: Bản thân thư mục không được sao chép, chỉ nội dung của nó.

Cách giải quyết tốt nhất tôi có thể đề nghị là thay đổi bố cục thư mục trong thư mục xây dựng của bạn, di chuyển ba thư mục trong một thư mục chính và thêm phụ huynh.

6

BMitch answered, được mong đợi là hành vi COPY.

Một giải pháp thay thế sẽ là ADD nội dung của tarball.

Tạo tarball ban đầu

tar -cvf dirs.tar dirone/ dirtwo/ dirthree/ 

Thêm nó vào việc xây dựng

FROM busybox 
ADD dirs.tar/
CMD find /dirone /dirtwo /dirthree 

Các tarball được tự động trích

○ →docker run c28f96eadd58 
/dirone 
/dirone/one 
/dirtwo 
/dirtwo/two 
/dirthree 
/dirthree/three 

Note rằng mỗi khi bạn cập nhật các tập tin tar bạn đang vô hiệu hóa bộ đệm ẩn của Docker cho bước đó. Nếu bạn đang xử lý nhiều tệp bạn có thể muốn thông minh khi bạn thực hiện tar -c. Bạn cũng có thể sử dụng tar -u nếu bạn có thể xử lý các tệp không bị xóa tự động khỏi tarball.

[ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something 
Các vấn đề liên quan