บน Ubuntu 14.04 (Trusty Tahr) ฉันกำลังมองหาวิธีที่จะหยุดคอนเทนเนอร์ที่รันอยู่และข้อมูลเดียวที่ฉันมีคือชื่อภาพที่ใช้ในคำสั่งเรียกใช้ Docker
มีคำสั่งให้ค้นหาคอนเทนเนอร์ที่ทำงานอยู่ที่ตรงกับชื่ออิมเมจนั้นแล้วหยุดหรือไม่?
บน Ubuntu 14.04 (Trusty Tahr) ฉันกำลังมองหาวิธีที่จะหยุดคอนเทนเนอร์ที่รันอยู่และข้อมูลเดียวที่ฉันมีคือชื่อภาพที่ใช้ในคำสั่งเรียกใช้ Docker
มีคำสั่งให้ค้นหาคอนเทนเนอร์ที่ทำงานอยู่ที่ตรงกับชื่ออิมเมจนั้นแล้วหยุดหรือไม่?
คำตอบ:
ปัญหาต่อไปนี้ 8959การเริ่มต้นที่ดีคือ:
docker ps -a -q --filter="name=<containerName>"
ตั้งแต่name
หมายถึงภาชนะและไม่ใช่ชื่อภาพคุณจะต้องใช้เมื่อเร็ว ๆ นี้บรรพบุรุษหาง 1.9 กรอง , กล่าวถึงในkoekiebox 's คำตอบ
docker ps -a -q --filter ancestor=<image-name>
ตามความเห็นด้านล่างโดยkirilเพื่อลบภาชนะเหล่านั้น:
stop
ส่งคืนคอนเทนเนอร์เช่นกัน
ดังนั้นการผูกมัดstop
และrm
จะทำงาน:
docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))
ps -a
ภาชนะหยุดจะถูกส่งกลับโดย ลบคอนเทนเนอร์แล้ว ... พวกมันถูกลบไปแล้วมันไม่มีอยู่อีกต่อไป
คำตอบก่อนหน้านี้ไม่ได้ผลสำหรับฉัน แต่สิ่งนี้ทำได้:
docker stop $(docker ps -q --filter ancestor=<image-name> )
คุณสามารถเริ่มต้นคอนเทนเนอร์ได้โดยตั้งชื่อคอนเทนเนอร์:
docker run -d --name <container-name> <image-name>
สามารถใช้อิมเมจเดียวกันในการหมุนหลายคอนเทนเนอร์ดังนั้นนี่เป็นวิธีที่ดีในการเริ่มต้นคอนเทนเนอร์ จากนั้นคุณสามารถใช้ชื่อคอนเทนเนอร์นี้เพื่อหยุดแนบ ... คอนเทนเนอร์:
docker exec -it <container-name> bash
docker stop <container-name>
docker rm <container-name>
sudo docker build . -t <img-name> && sudo docker stop <container-name> || true && sudo docker run -d --rm --name <container-name> <img-name>
รหัสนี้จะหยุดทุกภาชนะที่มีภาพCentOS: 6 ฉันไม่พบวิธีแก้ปัญหาที่ง่ายกว่าสำหรับเรื่องนี้
docker ps | grep centos:6 | awk '{print $1}' | xargs docker stop
หรือสั้นกว่า:
docker stop $(docker ps -a | grep centos:6 | awk '{print $1}')
สองวิธีในการหยุดเรียกใช้คอนเทนเนอร์:
1. $docker stop container_ID
2. $docker kill container_ID
คุณสามารถเรียกใช้คอนเทนเนอร์โดยใช้คำสั่งต่อไปนี้:
$docker ps
ลิงค์ต่อไปนี้สำหรับข้อมูลเพิ่มเติม:
$docker
? หรือว่า$
มาจาก shell prompt?
สำหรับ Docker รุ่น 18.09.0 ฉันพบว่าไม่จำเป็นต้องตั้งค่าสถานะรูปแบบ
docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-name>))
หยุดนักเทียบท่าคอนเทนเนอร์ด้วยชื่อรูปภาพ:
imagename='mydockerimage'
docker stop $(docker ps | awk '{split($2,image,":"); print $1, image[1]}' | awk -v image=$imagename '$2 == image {print $1}')
หยุดนักเทียบท่าคอนเทนเนอร์ด้วยชื่อภาพและแท็ก:
imagename='mydockerimage:latest'
docker stop $(docker ps | awk -v image=$imagename '$2 == image {print $1}')
หากคุณสร้างภาพคุณสามารถเพิ่มป้ายกำกับนั้นและกรองการเรียกใช้คอนเทนเนอร์ตามป้ายกำกับ
docker ps -q --filter "label=image=$image"
วิธีการที่ไม่น่าเชื่อถือ
docker ps -a -q --filter ancestor=<image-name>
docker ps -a -q --filter="name=<containerName>"
กรองตามชื่อคอนเทนเนอร์ไม่ใช่ชื่อรูปภาพ
docker ps | grep <image-name> | awk '{print $1}'
มีปัญหาเนื่องจากชื่อภาพอาจปรากฏในคอลัมน์อื่นสำหรับภาพอื่น ๆ
ฉันทำ a /usr/local/bin/docker.stop
ที่ใช้ในชื่อรูปภาพ (สมมติว่าคุณมีเพียงหนึ่งการทำงาน)
docker stop $(docker ps -q -f "name=$1")
ฉันพยายามห่อคำสั่ง Docker ของฉันในงานอึกและรู้ว่าคุณสามารถทำสิ่งต่อไปนี้:
docker stop container-name
docker rm container-name
สิ่งนี้อาจใช้ไม่ได้กับสถานการณ์ที่คุณมีหลายคอนเทนเนอร์ด้วยชื่อเดียวกัน (ถ้าเป็นไปได้) แต่สำหรับกรณีการใช้งานของฉันมันสมบูรณ์แบบ
ในกรณีของฉัน--filter ancestor=<image-name>
ไม่ทำงานดังนั้นคำสั่งต่อไปนี้จึงทำความสะอาดคอนเทนเนอร์ Docker ให้ฉัน:
docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))
แสดงรายการคอนเทนเนอร์ทั้งหมดที่มีข้อมูลและ ID
docker ps
docker stop CONTAINER ID
การเพิ่มคำตอบที่ยอดเยี่ยมของ @VonC นี่คือฟังก์ชัน ZSH ที่คุณสามารถเพิ่มลงในไฟล์. zshrc ของคุณ:
dockstop() {
docker rm $(docker stop $(docker ps -a -q --filter ancestor="$1" --format="{{.ID}}"))
}
จากนั้นในบรรทัดคำสั่งของคุณเพียงแค่ทำdockstop myImageName
และมันจะหยุดและลบภาชนะทั้งหมดที่เริ่มต้นจากภาพที่เรียกว่า myImageName
docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")
นี้ควรจะเพียงพอ
ใช้: หยุดนักเทียบท่าคอนเทนเนอร์ $ (นักเทียบท่าคอนเทนเนอร์ ls -q - ตัวกรองบรรพบุรุษ = mongo)
(base) :~ user$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d394144acf3a mongo "docker-entrypoint.s…" 15 seconds ago Up 14 seconds 0.0.0.0:27017->27017/tcp magical_nobel
(base) :~ user$ docker container stop $(docker container ls -q --filter ancestor=mongo)
d394144acf3a
(base) :~ user$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
(base) :~ user$
หากคุณต้องการAWK
วิธีง่าย ๆนี่คือการเรียนของฉัน:
docker rm -f $(docker ps | awk '{ if($2 == "<your image name>") { print $NF}}')
$(docker ps | awk '{ if($2 == "<your image name>") { print $NF}}')
- พิมพ์ชื่อคอนเทนเนอร์นักเทียบท่าตามภาพอินพุต
docker ps
- แสดงรายการตู้สินค้าทั้งหมด
awk '{ if($2 == "<your-image-name>") { print $NF}}'
- คอลัมน์ที่สองแยกวิเคราะห์ของdocker ps
ให้ชื่อภาพ เปรียบเทียบกับชื่อภาพของคุณจะดำเนินการprint $NF
ที่พิมพ์ชื่อคอนเทนเนอร์
docker rm -f
เอาภาชนะบรรจุออก
ตัวอย่างเช่นการลบคอนเทนเนอร์ที่ใช้งานอยู่ทั้งหมดของภาพอูบุนตูสามารถทำได้ง่ายๆเพียงแค่:
docker rm -f $(docker ps | awk '{ if($2 == "ubuntu:latest") { print $NF}}')
PS: อย่าลืมใส่แท็กภาพใน AWK เนื่องจากเป็นตัวเปรียบเทียบที่เท่ากัน
คุณสามารถใช้ps
คำสั่งเพื่อดูคอนเทนเนอร์ที่รันอยู่:
docker ps -a
จากที่นั่นคุณควรเห็นชื่อของคอนเทนเนอร์พร้อมกับ ID คอนเทนเนอร์ที่คุณกำลังมองหา ต่อไปนี้เป็นข้อมูลเพิ่มเติมเกี่ยวกับdocker ps