2015-01-22 18 views
13

Vì vậy, ý định chính là để dockerize một ứng dụng jar chất béo và đặt nó vào Elasticbeanstalk. Vấn đề là với bối cảnh. Đó là một chút ngu ngốc để thêm bối cảnh rất nhiều vào docker nếu tất cả tôi cần thực sự là một tập tin jar duy nhất.Dockerignore: Bỏ qua tất cả mọi thứ ngoại trừ một tập tin và Dockerfile

Tôi đã chơi với tệp .dockerignore nhưng tôi bị mất. Tôi đã cố gắng sử dụng gitignore phủ định, nhưng nó không hoạt động.

* 
!Dockerfile 
*/ 
!target/ 
target/* 
!target/*.jar 

Còn có điều đó với regex, nhưng có vẻ như regex phức tạp không được hỗ trợ.

^((?!Dockerfile).)*$ 

Tôi cũng đã cố gắng tìm kiếm trong stackoverflow, và hai là tất cả tôi thấy:

Câu hỏi này có thể là tương tự như cái thứ hai, nhưng tôi nghĩ nó hơi khác một chút ở đây, tôi chỉ muốn đưa một tệp vào trong ngữ cảnh.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

4

Điều này nghe có vẻ lạ, nhưng nếu tất cả những gì bạn cần chỉ là một tệp jar, bạn có thể tạo thư mục "docker" trong hệ thống xây dựng chứa Dockerfile của bạn. Khi bạn chạy các bản dựng của mình, có các kịch bản xây dựng sao chép tệp jar đơn vào "docker", sau đó thực hiện việc xây dựng hình ảnh docker (từ bên trong thư mục "docker") và đẩy vào sổ đăng ký của bạn khi hoàn tất.

+1

Xin chào, điều đó hoàn toàn không lạ chút nào. Tôi nghĩ rằng đó là một thực tế chung, nhưng tôi đã tìm kiếm một cách để làm điều đó với .dockerignore nếu có thể. Bên cạnh đó, tôi không thực sự thích mvn xml :) – Rowanto

13

Từ dockerfile reference:

Ngoài quy tắc filepath.Match Go, Docker cũng hỗ trợ một chuỗi ký tự đại diện đặc biệt ** phù hợp với bất kỳ số lượng các thư mục (bao gồm số không). Ví dụ, **/*. Go sẽ loại trừ tất cả các tệp kết thúc bằng .go được tìm thấy trong tất cả các thư mục, bao gồm thư mục gốc của bối cảnh xây dựng.

Vì vậy, một dòng có chứa đơn giản ** sẽ bỏ qua mọi thứ trong cùng thư mục với Dockerfile.

Như dự kiến, dấu chấm than sau đó có thể được sử dụng để tham chiếu bất kỳ tệp nào bạn muốn gửi tới trình nền của trình neo.

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