นักเทียบท่าวิ่ง ubuntu / bin / bash เทียบกับนักวิ่ง ubuntu วิ่ง


15

นักเทียบท่ารุ่น 17.06.0-ce

ฉันกำลังเรียน Docker โดยการดูหลักสูตรวิดีโอ

วิทยากรบรรยาย:

sudo docker run -ti ubuntu /bin/bash

เรียกใช้นักเทียบท่าที่มีรูปอูบุนตู /bin/bash\และสิ่งที่เป็นปัญหาให้ฉัน man docker runแสดงให้เห็นว่า/bin/bashเป็นคำสั่ง docker run IMAGE [COMMAND]กล่าวคือ ก็โอเค แต่สิ่งที่แตกต่างกันคืออะไร

sudo docker run -ti ubuntu 

และ

sudo docker run -ti ubuntu /bin/bash

สำหรับฉันไม่มี และอาจารย์ไม่ได้ให้ความสนใจกับคำสั่ง เขาบอกว่าเราแค่เรียกนักเทียบท่า มันเป็นคำสั่งแรกของเขาในหลักสูตร จากนั้นเขาก็แสดงให้เห็นว่าเราถูกแยกออกจากเครื่องโฮสต์เราสามารถทำลายสิ่งที่เราต้องการได้อย่างอิสระโดยไม่มีความเสียหายใด ๆ (เช่น rm -rf / bin)

ฉันตรวจสอบแล้ว:

$ sudo docker run -ti ubuntu
root@aaf7cd26fe18:/# echo $SHELL
/bin/bash


$ sudo docker run -ti ubuntu /bin/bash
root@6b2570958216:/# echo $SHELL
/bin/bash

สำหรับตัวฉันเองฉันตัดสินใจที่จะทิ้ง/bin/bashส่วนนี้ไปเป็นขยะ

แต่ฉันตัดสินใจถามคุณว่า: บางทีอาจมีความแตกต่างระหว่างสองวิธีในการใช้นักเทียบท่า? ถ้ามีมันเป็นอย่างไร

คำตอบ:


11

ภาพหางสามารถสามารถระบุได้ว่าคำสั่งบางอย่างที่จะทำงานโดยค่าเริ่มต้นใช้สั่งใน Dockerfile และ:CMD

หากข้อโต้แย้งที่ระบุให้ผู้ใช้แล้วพวกเขาจะแทนที่ค่าเริ่มต้นที่ระบุไว้ในdocker runCMD

เมื่อมันเกิดขึ้นคำสั่งเริ่มต้นที่ระบุไว้สำหรับUbuntu Dockerfileคืออันที่จริงแล้วทุบตี:

CMD ["/bin/bash"]

ดังนั้นสำหรับกรณีเฉพาะของภาพอูบุนตูก็ไม่ต่างจากdocker run ... ubuntu /bin/bashdocker run ... ubuntu

แน่นอนว่าสิ่งนี้ไม่จำเป็นต้องเป็นจริงเสมอไป Dockerfile สำหรับโปรแกรมฐานข้อมูลอาจเรียกใช้คำสั่งฐานข้อมูลตามค่าเริ่มต้น docker run ... /bin/bashในกรณีที่ว่าถ้าคุณจำเป็นต้องเปลือกโต้ตอบคุณจะต้องทำ

โดยทั่วไปคุณไม่สามารถคาดเดาได้ว่าdocker runจะให้เชลล์แบบโต้ตอบแก่คุณ การระบุว่าปลอดภัยกว่า/bin/bashคุณต้องใช้เชลล์


2

เมื่อคุณไม่ได้ให้คำสั่งซึ่งในกรณีของคุณ/bin/bashในขณะที่ใช้-ti( iโต้ตอบtTerminal) คุณจะได้รับที่แนบมากับโปรแกรมเริ่มต้นที่ได้มีการกำหนดที่จะดำเนินการเมื่อมีการใช้คำสั่งในrunDockerFile

ตัวอย่างเช่นหากรูปภาพรันเว็บเซิร์ฟเวอร์บนพื้นหน้าสิ่งที่คุณจะเห็นหลังจากใช้งานrunโดยไม่ต้อง/bin/bashมีบันทึกของเว็บเซิร์ฟเวอร์นั้น (โปรแกรมเริ่มต้นที่ทำงาน)

ในขณะที่ระบุคำสั่งคุณกำลังบอกว่าฉันไม่สนใจสิ่งที่เกิดขึ้นหรือกำลังทำงานอยู่บนภาพให้ฉันเป็นเทอร์มินัลเชิงโต้ตอบโดยการเรียกใช้ "คำสั่ง" นี้

ใน Ubuntu คำสั่งเริ่มต้นคือbashและถ้าคุณไม่ได้ให้-tiภาชนะจะถูกหยุดทันทีหลังจากเรียกใช้ เพราะมันวิ่งทุบตีในโหมดที่ไม่ใช่แบบโต้ตอบและหลังจากเสร็จสิ้นคอนเทนเนอร์จะไม่มีอะไรทำอีกแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.