2014-06-20 22 views
13

Tôi muốn sử dụng một Dockerfile để xây dựng một hình ảnh. Tuy nhiên, lệnh sẽ cần đầu vào của người dùng khi chúng chạy. Hiện tại, quá trình xây dựng không thành công vì trình docker thoát khỏi đầu vào của người dùng. Tôi biết tôi có thể sử dụng tùy chọn -i -t trên lệnh docker run nhưng tôi muốn làm điều đó trên một Dockerfile. Làm thế nào là có thể?docker tương tác được xây dựng từ dockerfile?

+0

Nó phụ thuộc vào những gì userinput, nếu đó là userinput cho apt-get update là ví dụ, sau đó bạn có thể thêm -y để luôn luôn nói có. Nếu không, chạy một cái gì đó mà có userinput, lưu nó trong một biến môi trường và sau đó kéo nó từ các biến môi trường. –

+0

Tôi đang chạy 'rvmsudo passenger-install-nginx-module'. Tôi không chắc chắn đề nghị của bạn áp dụng ở đây. – Keeto

+1

Trong trường hợp đó tôi sẽ xây dựng một hình ảnh cơ sở với các mô-đun đã được cài đặt (nhập thủ công các dữ liệu cần thiết), sau đó tạo Dockerfiles bằng cách sử dụng hình ảnh mới đó. Tôi tò mò muốn xem nếu có một cách chung chung để giải quyết nó nếu kịch bản bạn đang chạy không hỗ trợ thiết lập không cần giám sát ... –

Trả lời

6

Bạn có thể thử với expect hoặc một công cụ tương tự.

Cách dễ nhất để định cấu hình nó là sử dụng công cụ autoexpect, cho phép bạn chạy các lệnh tương tác và tạo tập lệnh mong đợi cho bạn.

Tôi không thể nhận được các công cụ rvmsudo làm việc (tôi đã không sử dụng nó và không muốn dành quá nhiều thời gian với nó) vì vậy tôi quyết định sử dụng vi thay thế. Đầu tiên chạy autoexpect

$ autoexpect vi test 

này sẽ mở vi và bạn có thể tạo hoặc chỉnh sửa các tập tin và lưu nó. Sau khi thoát khỏi số vi, bạn sẽ thấy tệp của mình test cũng như tập lệnh mong đợi script.exp.

Sau đó, bạn có thể xóa tệp thử nghiệm và thực hiện script.exp. Nó sẽ tạo lại cùng một tệp bằng các bước tương tự.

Công cụ tự động dò tìm là rất tốt, nhưng bạn có thể phải tạo tập lệnh từ đầu nếu bạn cần kiểm soát nhiều hơn những gì xảy ra. Ví dụ. nếu bạn không muốn tập lệnh hoạt động với đầu vào được mong đợi chính xác.

+2

Gotta yêu downvoters, những người không bình luận về những gì sai với anh ta trả lời. Chúc mừng bạn! – ivant

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