ฉันสามารถสร้าง Docker container จาก Dockerfile ด้วยวิธีการโต้ตอบโดยการจัดสรร TTY หลอกได้ไหม?


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เมื่อฉันต้องใช้เครื่องมือคาดหวัง เครื่องมือที่คาดว่าได้รหัสผ่านของฉัน hardcoded ฉันไม่ต้องการทำ

คำตอบ:


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จากโฮสต์แทนที่จะสร้างของฉันเองในภาชนะ ขอบคุณ!
koralgooll

1
ฉันอยากจะไม่ทำdocker commitตามปกติ - มันสามารถระบายสีคุณลงในมุมของ 'ภาพทอง'
Sobrique

นั่นเป็นจุดที่ดี @Sobrique นี่คือหนึ่งในเหตุผลที่นักเทียบท่าไม่สนับสนุนการสร้างแบบโต้ตอบหรือสิ่งอื่น ๆ ที่ไม่ได้กำหนดไว้ล่วงหน้า
Matt Vollrath

ดังนั้น Docker ใช้สร้างเครื่องจักรเพียงอย่างเดียวหรือไม่? เนื่องจากการติดตั้งจำนวนมากจะต้องมีการโต้ตอบกับผู้ใช้ ฉันไม่สามารถใช้ Dockerfile ในงานสร้างของฉันเพียงเพราะฉันต้องติดตั้ง SAGE และถามคำถามกับผู้ใช้
Magno C

@MagnoC คุณไม่สามารถสร้างอะไรได้ด้วย Docker แนวคิดเบื้องหลัง Dockerfiles คือคุณต้องการผลลัพธ์เดียวกันทุกครั้งเมื่อทำงาน อินพุตแบบโต้ตอบสามารถเปลี่ยนแปลงได้ ดังที่แมตต์กล่าวไว้คุณสามารถคอมมิทคอนเทนเนอร์ที่ถูกดัดแปลงเป็นภาพ นั่นคือสิ่งที่ฉันทำอย่างน้อย ..
musicliftsme
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.