Tôi có thể xây dựng bộ chứa Docker từ Dockerfile theo cách tương tác với việc phân bổ một số TTY giả không?


12

Tôi xây dựng container từ bên dưới Dockerfile:

FROM ubuntu:14.04
...
RUN apt-get update && apt-get install -y vim
#RUN ssh-keygen -f /root/.ssh/id_rsa -N strongpass123$%^
RUN ssh-keygen -f /root/.ssh/id_rsa
...

Tôi làm điều đó khá hiếm khi, nhưng có nhiều lệnh trước khi sử dụng ssh-keygenvà sau nó.

Tôi biết rằng tôi có thể làm điều đó từ tập lệnh thông qua docker exec -it thirsty_darwin sh script.shvà sau đó gắn thẻ hình ảnh và sau đó sử dụng chuỗi các thùng chứa (hình ảnh), nhưng nó không phải là giải pháp rõ ràng như tôi muốn.

Ngay cả trường hợp xấu nhất là ssh-add ~/.ssh/id_rsakhi tôi phải sử dụng công cụ mong đợi. Công cụ mong đợi đã mã hóa mật khẩu của tôi. Tôi không muốn làm điều đó.

Câu trả lời:


17

Nói chung, bạn không nên bao gồm bất kỳ bí mật trong hình ảnh Docker. Xem câu trả lời này để biết thêm về chủ đề này.

Docker không hỗ trợ các bản dựng tương tác vì những lý do chính đáng như được giải thích trong vấn đề này .

Nếu bạn thực sự cần phải làm điều này, bạn có thể sử dụng docker commitnhư vậy:

docker build -t thirsty_darwin_base /path/to/Dockerfile
docker run -it --name=thirsty_darwin_changes thirsty_darwin_base /bin/bash
# do interactive stuff in the shell, then exit
docker commit thirsty_darwin_changes thirsty_darwin

Bây giờ thirsty_darwincó những thay đổi tương tác của bạn.

Cập nhật: Docker đã phát hành quản lý bí mật toàn diện hơn kể từ khi câu trả lời này được viết.


Như tôi đã đề cập, tôi đã tìm thấy giải pháp đó, nhưng liên kết đầu tiên (câu trả lời này) có cách giải quyết tốt cho vấn đề của tôi. Tôi sẽ gắn khóa thông qua VOLUMEtừ máy chủ thay vì tạo riêng trong container. Cảm ơn!
koralgooll

1
Tôi sẽ thôi thúc không làm docker commitbình thường - nó có thể vẽ bạn vào một góc của 'hình ảnh vàng'.
Sobrique

Đó là một điểm tốt @Sobrique. Đây là một trong những lý do Docker không khuyến khích các bản dựng tương tác hoặc không xác định
Matt Vollrath

Vì vậy, Docker được sử dụng để xây dựng chỉ các máy đơn giản? Bởi vì nhiều cài đặt sẽ yêu cầu tương tác người dùng. Tôi không thể sử dụng Dockerfile trong bản dựng của mình chỉ vì tôi cần cài đặt SAGE và nó hỏi một số câu hỏi cho người dùng.
Magno C

@MagnoC, không bạn có thể xây dựng bất cứ thứ gì với Docker. Ý tưởng đằng sau Dockerfiles là bạn luôn muốn kết quả tương tự khi chạy. Đầu vào tương tác có thể thay đổi điều đó. Như Matt đã nói, bạn có thể cam kết một container bị thay đổi thành một hình ảnh. Đó là những gì tôi đã làm ít nhất ..
nhạcliftsme
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.