이미지 이름으로 Docker 컨테이너 중지-Ubuntu


156

Ubuntu 14.04 (Trusty Tahr)에서 실행중인 컨테이너를 중지하는 방법을 찾고 있는데 내가 가지고있는 유일한 정보는 Docker 실행 명령에 사용 된 이미지 이름입니다.

해당 이미지 이름과 일치하는 일치하는 모든 실행 컨테이너를 찾아 중지하는 명령이 있습니까?

답변:


210

문제 8959 다음에 시작하는 것이 좋습니다.

docker ps -a -q --filter="name=<containerName>"

이미지 이름이 아닌 컨테이너를name 참조 하므로 koekiebox답변 에서 언급 한 최신 Docker 1.9 필터 조상 을 사용해야합니다 .

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}}"))

대단하다. 그 후 내 문제는 컨테이너를 제거 할 때 컨테이너가 멈추었 기 때문에 docker pd에 의해 반환되지 않습니다. 그것을하는 방법에 대한 단서가 있습니까?
kiril December

@kiril 중지 된 컨테이너는에서 반환합니다 ps -a. 제거 된 용기 ... 잘 제거 되어 더 이상 존재하지 않습니다.
VonC

1
고마워, 나는 컨테이너를 반환하는 것도 멈추지 않았다. 따라서 chaining stop과 rm이 작업을 수행합니다. docker rm $ (docker stop $ (docker ps -a -q --filter = "name = <imageName>"))
kiril

@kiril 바로 그 아이디어입니다.
VonC


44

컨테이너 이름을 컨테이너 이름으로 설정할 수 있습니다 :

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>
melanke

16

이 코드는 이미지 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 $ (docker ps -a | grep centos : 6 | awk '{print $ 1}')
Shailesh kumar

@Shaileshkumar 버전을 추가했습니다 =)
ArgonQQ

9

컨테이너 실행을 중지하는 두 가지 방법 :

1. $docker stop container_ID

2. $docker kill container_ID

다음 명령을 사용하여 컨테이너를 실행할 수 있습니다.

$docker ps

자세한 내용은 다음 링크를 참조하십시오.


마지막 링크가 끊어졌습니다 ( "죄송합니다, 해당 페이지를 찾을 수 없습니다" ).
Peter Mortensen

말 그대로 $docker입니까? 아니면 $쉘 프롬프트에서 왔습니까?
Peter Mortensen

2

Docker 버전 18.09.0의 경우 형식 플래그가 필요하지 않습니다.

docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-name>))

2

이미지 이름으로 도커 컨테이너를 중지하십시오.

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}'

이미지 이름이 다른 이미지의 다른 열에 나타날 수 있으므로 문제가 있습니다


1

내가 만든 /usr/local/bin/docker.stop이미지 이름에 걸리는 그 (하나만 실행이 가정).

docker stop $(docker ps -q -f "name=$1")

1

Docker 명령을 gulp 작업으로 래핑하려고 시도했으며 다음을 수행 할 수 있음을 깨달았습니다.

docker stop container-name
docker rm container-name

동일한 이름을 가진 여러 컨테이너가있는 시나리오에서는 가능하지 않지만 (가능한 경우) 사용 사례로는 완벽했습니다.


1

필자의 경우 --filter ancestor=<image-name>작동하지 않았으므로 다음 명령으로 Docker 컨테이너를 정리했습니다.

docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))


1

@VonC 최상의 답변 외에도 .zshrc 파일에 추가 할 수있는 ZSH 함수가 있습니다.

dockstop() {
  docker rm $(docker stop $(docker ps -a -q --filter ancestor="$1" --format="{{.ID}}"))
}

그런 다음 명령 행에서 간단히 수행하면 dockstop myImageNamemyImageName이라는 이미지에서 시작된 모든 컨테이너가 중지되고 제거됩니다.



0

사용 : docker container stop $ (docker container ls -q --filter ancestor = 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$

0

간단한 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에 포함시켜야합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.