นักเทียบท่า - คุณจะปิดการใช้งานรีสตาร์ทอัตโนมัติบนภาชนะได้อย่างไร?


156

ฉันสามารถเปิดใช้งานการรีสตาร์ทอัตโนมัติด้วย--restart=alwaysแต่หลังจากที่ฉันหยุดคอนเทนเนอร์ฉันจะปิดคุณลักษณะนั้นได้อย่างไร

ปกติฉันจะเรียกใช้เว็บเซิร์ฟเวอร์และโดยทั่วไปจะแมปพอร์ต 80:

docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash

แต่มีบางครั้งที่ฉันต้องการเรียกใช้อิมเมจเวอร์ชันที่ใหม่กว่าของฉัน แต่ฉันต้องการเก็บภาชนะเก่าไว้ ปัญหาคือว่าถ้ามีหลายคอนเทนเนอร์ด้วยมี--restart=alwaysเพียงหนึ่งในนั้นเท่านั้น (สุ่ม?) เริ่มต้นเพราะพวกเขากำลังแข่งขันกันสำหรับพอร์ต 80 บนโฮสต์

คำตอบ:


326

คุณสามารถใช้--restart=unless-stoppedตัวเลือกตามที่ @Shibashis กล่าวถึงหรืออัปเดตนโยบายการเริ่มต้นใหม่ (ต้องใช้ตัวเชื่อมต่อ 1.11 หรือใหม่กว่า);

ดูเอกสารdocker updateและนโยบายการรีสตาร์ทเทียบท่า

docker update --restart=no my-container

ที่อัพเดตนโยบายการรีสตาร์ทสำหรับคอนเทนเนอร์ที่มีอยู่ ( my-container)


69
ใช้docker update --restart=no $(docker ps -a -q)เพื่ออัปเดตคอนเทนเนอร์ทั้งหมดของคุณ :-)
ทำเครื่องหมาย Mooibroek


22

ใช้ด้านล่างเพื่อปิดการใช้งานทั้งหมดรีสตาร์ทอัตโนมัติ (daemon) ภาชนะบรรจุ

docker update --restart=no $(docker ps -a -q)

ใช้ข้อมูลต่อไปนี้เพื่อปิดใช้งานรีสตาร์ทคอนเทนเนอร์ SINGLE

docker update --restart=no the-container-you-want-to-disable-restart

เหตุผล :

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

หมายเหตุ

หากคุณใช้นักเทียบท่าเขียนสิ่งนี้อาจมีประโยชน์ที่จะรู้

รีสตาร์ท no เป็นนโยบายรีสตาร์ทเริ่มต้นและจะไม่รีสตาร์ทคอนเทนเนอร์ภายใต้สถานการณ์ใด ๆ เมื่อมีการระบุเสมอคอนเทนเนอร์จะรีสตาร์ทเสมอ นโยบายความล้มเหลวรีสตาร์ทคอนเทนเนอร์ถ้ารหัสทางออกบ่งชี้ว่ามีข้อผิดพลาดที่เกิดความผิดพลาด

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

restart: always

12

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

ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้บริการที่คุณลืมเกี่ยวกับ:

docker service ls

จากนั้นคุณสามารถหยุดบริการได้

docker service rm <service id discovered with previous command>

1
lsผลลัพธ์มีข้อผิดพลาดError response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
naXa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.