क्या मैं कुछ छद्म TTY के आवंटन के साथ एक इंटरैक्टिव तरीके से Dockerfile से एक डॉक कंटेनर का निर्माण कर सकता हूं?


12

मैं 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
...

मैं इसे बहुत कम ही करता हूं, लेकिन इसके इस्तेमाल से पहले ssh-keygenऔर इसके बाद भी कई कमांड हैं ।

मुझे पता है कि मैं इसे स्क्रिप्ट के माध्यम से कर सकता हूं docker exec -it thirsty_darwin sh script.shऔर फिर छवि को टैग कर सकता हूं और फिर कंटेनरों (छवियों) का उपयोग कर सकता हूं , लेकिन यह उतना स्पष्ट समाधान नहीं है जितना मैं चाहता हूं।

इससे भी बुरी स्थिति यह है कि ssh-add ~/.ssh/id_rsaजब मुझे अपेक्षित टूल का उपयोग करना होता है। एक्सपेक्ट टूल ने मेरा पासवर्ड हार्डकोड किया है। मैं यह नहीं करना चाहता हूँ।

जवाबों:


17

आम तौर पर, आपको डॉकर छवियों में कोई रहस्य शामिल नहीं करना चाहिए। इस विषय पर अधिक के लिए यह उत्तर देखें ।

डॉकर इस मुद्दे में बताए गए अच्छे कारणों के लिए इंटरएक्टिव बिल्ड का समर्थन नहीं करता है ।

यदि आपको वास्तव में ऐसा करने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं docker commit:

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

अब thirsty_darwinआपके इंटरैक्टिव परिवर्तन हुए हैं।

अद्यतन: इस उत्तर के लिखे जाने के बाद से डॉकर ने अधिक व्यापक रहस्य प्रबंधन जारी किया है।


जैसा कि मैंने उल्लेख किया है कि मुझे वह समाधान मिल गया था, लेकिन पहली कड़ी (इस उत्तर) में मेरी समस्या के लिए अच्छा समाधान है। मैं VOLUMEकंटेनर में अपना निर्माण करने के बजाय मेजबान से कुंजी माउंट करूंगा । धन्यवाद!
कोरालगॉल

1
मैं एक docker commitसामान्य रूप से हालांकि ऐसा नहीं करने का आग्रह करूंगा - यह आपको एक 'सुनहरी छवि' के कोने में चित्रित कर सकता है।
सोबरीक

यह एक अच्छा बिंदु है @Sobrique। यह एक कारण है कि डॉकर इंटरएक्टिव या अन्यथा गैर-नियतात्मक बिल्ड को हतोत्साहित करता है
मैट वोलरथ

तो क्या डॉकटर का उपयोग केवल मशीनों के निर्माण के लिए किया जाता है? क्योंकि कई इंस्टॉलेशन के लिए यूजर इंटरेक्शन की आवश्यकता होगी। मैं अपने निर्माण में Dockerfile को केवल इसलिए इस्तेमाल नहीं कर सकता क्योंकि मुझे SAGE को स्थापित करने की आवश्यकता है और यह उपयोगकर्ता से कुछ प्रश्न पूछता है।
मैग्नो सी

@MagnoC, नहीं, आप डॉकर के साथ कुछ भी नहीं बना सकते हैं। Dockerfiles के पीछे विचार यह है कि जब आप रन करते हैं तो आप हमेशा वही परिणाम चाहते हैं। इंटरएक्टिव इनपुट बदल सकते हैं। जैसा कि मैट ने कहा, आप एक परिवर्तित कंटेनर को एक छवि में रख सकते हैं। यही कारण है कि मैं कम से कम .. कर रहा हूँ है
musicliftsme
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.