วิธีรีสตาร์ท Docker Container ที่หยุดทำงาน


91

ฉันเรียกใช้ Docker container จากรูปภาพด้วยคำสั่งต่อไปนี้:

$ docker run -d myimage /bin/bash -c "mycommand"

เมื่อ"mycommand"เสร็จสิ้นคอนเทนเนอร์จะหยุดทำงาน (ฉันคิดว่ามันถูกหยุด) แต่มันไม่ได้ถูกลบออกเพราะฉันสามารถมองเห็นได้ด้วยคำสั่งนี้:

$ docker ps -a

มีวิธีใดบ้างที่ไปยังrestartคอนเทนเนอร์นี้ด้วยพารามิเตอร์เดียวกันและเก็บข้อมูลที่สร้างโดยmycommand?


"ไดรฟ์ข้อมูล" หรือ "การติดตั้งไดเรกทอรีโฮสต์" ทำให้คุณพอใจหรือไม่? เช่นเดียวกับเอกสารที่กล่าวถึง: docs.docker.com/engine/tutorials/dockervolumes
Haoming Zhang

คำตอบ:


124

ใช่เมื่อคำสั่งเริ่มต้นเสร็จสิ้นการเรียกใช้คอนเทนเนอร์จะหยุดทำงาน

คุณสามารถเริ่มคอนเทนเนอร์ที่หยุดได้โดยใช้:

docker start container_name

หากคุณต้องการดูผลลัพธ์ของคำสั่งของคุณคุณควรเพิ่ม-aiตัวเลือก:

docker start -ai container_name

ปล. มีdocker restart container_nameแต่ที่ใช้ในการรีสตาร์ทคอนเทนเนอร์ที่กำลังทำงานอยู่ - ฉันเชื่อว่านั่นไม่ใช่กรณีของคุณ


1
ตู้คอนเทนเนอร์ของฉันหยุดทันทีหลังจากเริ่มต้นในแต่ละครั้ง ไม่แน่ใจว่าจุดนั้นคืออะไร การใช้คำสั่ง -ai ให้การตอบสนองนี้: ไม่สามารถเปิดไฟล์ความต้องการ: [Errno 2] ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว: 'requirements.txt'
geoidesic

@geoidesic กรุณาให้รายละเอียดเพิ่มเติมได้หรือไม่? คุณกำลังพูดถึงไฟล์ 'requirements.txt' ประเภทใด
lmtx

1
@geoidesic, การแก้ไขปัญหานี้ผมเปลี่ยนจุดเข้าใช้งานเพียงแค่เรียกใช้คำสั่งการนอนหลับที่ 900 docker exec -it container_name bashซึ่งได้รับอนุญาตให้ฉันไปแล้วเชื่อมต่อกับภาชนะและเรียกใช้คำสั่งภายในโดยใช้ เมื่อฉันรันคำสั่งจากภายในคอนเทนเนอร์ฉันเห็นว่าเหตุใดการใช้งานสคริปต์ครั้งแรกของฉันจึงล้มเหลวและฉันได้แก้ไขแล้ว
PatS

@PatS คุณช่วยแบ่งปันวิธีการรวมstartกับsleep? ฉันไม่สามารถไปถึงจุดที่ฉันสามารถวิ่งได้exec
3pitt

11

ขั้นแรก$ docker ps -aแสดงคอนเทนเนอร์ทั้งหมด (คอนเทนเนอร์ที่กำลังทำงานและคอนเทนเนอร์ที่หยุดทำงาน) นั่นคือเหตุผลที่คุณไม่เห็นคอนเทนเนอร์ที่หยุดอยู่ในรายการ

ประการที่สองคุณสามารถเริ่มคอนเทนเนอร์ที่หยุดทำงานได้อย่างง่ายดาย:

$ docker start container_name

เมื่อเริ่มคอนเทนเนอร์แล้วคุณสามารถเรียกใช้คำสั่งของคุณโดย:

$ docker exec -it container_name bash -c "mycommand"

สิ่งที่คุณสร้างในคอนเทนเนอร์ของคุณจะยังคงอยู่ในคอนเทนเนอร์ตราบเท่าที่มีอยู่ หากคุณต้องการเก็บข้อมูลแม้ว่าคอนเทนเนอร์ของคุณจะถูกลบออกคุณสามารถใช้ไดรฟ์ข้อมูลได้


1

มันควรจะเป็น

$ docker restart container_id # OR
$ docker restart container_name

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