이미지 이름으로 도커 컨테이너 중지 - Ubuntu
Ubuntu 14.04 (Trusty Tahr)에서 실행 중인 컨테이너를 중지하는 방법을 찾고 있는데 도커 실행 명령에서 사용된 이미지 이름만 가지고 있습니다.
해당 이미지 이름과 일치하는 일치하는 실행 중인 모든 컨테이너를 찾아서 중지하는 명령이 있습니까?
알고 계시다면.image:tag
정확한 컨테이너 버전
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}}"))
이미지 이름만 알고 있는 경우(아닙니다)image:tag
)
Alex Jansen이 논평에서 지적한 바와 같이:
상위 옵션은 와일드카드 매칭을 지원하지 않습니다.
알렉스가 해결책을 제안하지만, 당신이 같은 이미지에서 여러 개의 컨테이너를 실행하고 있을 때, 내가 실행할 수 있었던 것은 (당신의)~/.bashrc
예를 들어):
dsi() { docker stop $(docker ps -a | awk -v i="^$1.*" '{if($2~i){print$1}}'); }
그 다음에 그냥 내 bash 세션을 호출합니다(소싱 후).~/.bashrc
):
dsi alpine
그리고 모든 컨테이너는alpine.*:xxx
멈출 겁니다.
의미: 이름이 시작하는 이미지alpine
.
당신이 조정해야 할 수도 있습니다.awk -v i="^$1.*"
네가 원한다면^$1.*
더 정확히 말하면요
그럼요, 그럼요.
drmi() { docker rm $(dsi $1 | tr '\n' ' '); }
a.drmi alpine
멈추어서 모든 것을 제거할 것입니다alpine:xxx
컨테이너.
이전의 답변은 제게 맞지 않았지만, 이것은 효과가 있었습니다.
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>
이 코드는 이미지 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
자세한 내용은 다음 링크를 참조하십시오.
- https://docs.docker.com/engine/reference/commandline/stop/
- https://docs.docker.com/v1.8/reference/commandline/kill/
이렇게 하면 이미지 = "yourImgName"이 있는 모든 컨테이너만 중지됩니다.
sudo docker stop $(sudo docker ps | grep "yourImgName" | cut -d " " -f 1)
그러면 이미지 = "yourImgName"이 있는 모든 컨테이너가 중지되고 제거됩니다.
sudo docker rm $(sudo docker stop $(sudo docker ps -a | grep "yourImgName" | cut -d " " -f 1))
을 ./usr/local/bin/docker.stop
이미지 이름을 입력합니다(assumes 실행 중인 것은 하나뿐임).
docker stop $(docker ps -q -f "name=$1")
이미지 이름으로 도커 컨테이너 중지:
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}'
이미지 이름이 다른 이미지의 다른 열에 나타날 수 있으므로 문제가 있음
모든 컨테이너를 정보 및 ID와 함께 나열합니다.
docker ps
docker stop CONTAINER ID
도커 버전 18.09.0의 경우 포맷 플래그가 필요 없음을 알게 되었습니다.
docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-name>))
@VonC 최고의 답변 외에 .zshrc 파일에 추가할 수 있는 ZSH 기능이 있습니다.
dockstop() {
docker rm $(docker stop $(docker ps -a -q --filter ancestor="$1" --format="{{.ID}}"))
}
그러면 명령 줄에서, 간단히 하시오.dockstop myImageName
그리고 myImageName이라는 이미지에서 시작된 모든 컨테이너를 중지하고 제거합니다.
도커 명령어를 꿀꺽꿀꺽 작업으로 포장하려고 하다가 당신이 다음을 할 수 있다는 것을 깨달았습니다.
docker stop container-name
docker rm container-name
이름이 같은 여러 개의 컨테이너가 있는 시나리오에서는 작동하지 않을 수 있지만(가능하다면), 제 사용 사례에서는 완벽했습니다.
나같은 경우에는--filter ancestor=<image-name>
작동하지 않아 다음 명령으로 도커 컨테이너를 정리했습니다.
docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))
용도: 도커 컨테이너 중지($ docker 컨테이너 ls -q --filter parent=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$
도커 컨테이너를 재구축하고 중지하고 다시 시작하는 스크립트입니다.
docker pull [registry]/[image]:latest
docker build --no-cache -t [localregistry]/[localimagename]:latest -f compose.yaml context/
docker ps --no-trunc | grep [localimagename] | awk '{print $1}' | xargs docker stop
docker run -d -p 8111:80 [localregistry]/[localimagename]:latest
note --no-trunc 인수는 이미지 이름 또는 기타 정보를 출력에서 전체적으로 보여줍니다.
이미지 태그를 지정할 필요가 없는 간결한 명령어는 다음과 같습니다(대부분의 답변이 그렇듯).
docker stop $(docker ps -a | awk -v i="^${image_name}.*" '{if($2~i){print$1}}')
docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")
이정도면 충분하네.
만약 당신이 심플함을 선호한다면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
컨테이너를 제거합니다.
예를 들어, ubuntu 이미지의 실행 중인 모든 컨테이너를 제거하는 작업은 다음과 같이 간단하게 수행할 수 있습니다.
docker rm -f $(docker ps | awk '{ if($2 == "ubuntu:latest") { print $NF}}')
추신: 이미지 태그는 AWK에 포함하는 것을 기억하세요. 동등한 비교기니까요.
컨테이너 이름의 일부를 알고 있다면 다음과 같이 도커와 함께 AWK를 사용할 수 있습니다.
CONTAINER_IDS=$(docker ps -a | awk '($2 ~ /container.*/) {print $1}')
if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then
echo "No containers available for deletion"
else
docker rm -f $CONTAINER_IDS
fi
image: docker
services:
- docker:dind
stages:
- deploy
step-deploy-prod:
stage: deploy
tags:
- docker
script:
- container_id=$(docker ps -q -a -f status=running --filter name=todoapp)
- if [ -n "$container_id" ]; then
docker stop $container_id;
docker rm -f $container_id;
fi
- container_id=$(docker ps -q -a -f status=exited --filter name=todoapp)
- if [ -n "$container_id" ]; then
docker rm -f $container_id;
fi
- docker build -t app/creative .
- docker run -d -p 8081:80 --name todoapp app/creative
먼저 명령어로 실행중인 컨테이너를 확인합니다.docker ps -q -a -f status=running --filter name=todoapp
, 만약 그것이 하나를 발견하면 그것은 멈추고 실행중인 컨테이너를 삭제한 다음, 정지된 컨테이너를 확인하고 이름을 가지고 있습니다.todoapp
명령어 사용docker ps -q -a -f status=exited --filter name=todoapp
, 발견되면 컨테이너를 제거할 겁니다그런 다음 새 이미지를 만들고 새 빌드 이미지로 새 컨테이너를 시작합니다.
제가 알아낸 바와 같이, 컨테이너를 멈추면, 그 컨테이너는 다음과 같이 찾을 수 없습니다.docker rm
gitlab-ci를 통해 새로 배포된 이미지를 교체하고 싶다면 누군가가 이 문제를 발견할 경우를 대비합니다.
에 옵션이 있습니다.docker ps
지휘권을-f status=exited
여기에는 정지 상태에 있는 모든 컨테이너가 표시됩니다.
container_id=$(docker ps -q -a -f status=exited --filter name=todoapp)
이 명령은 중지되고 이름이 todoapp인 컨테이너 ID만 반환합니다.
또한 정지된 용기를 제거하는 더 좋은 방법은-f
아니면--force
옵션으로 선택합니다.docker rm
지휘.이 옵션은 컨테이너가 정지 상태에 있더라도 컨테이너를 제거합니다.
사용할 수 있습니다.ps
실행 중인 컨테이너를 살펴보도록 명령합니다.
docker ps -a
거기서부터 당신이 찾으시는 컨테이너 ID와 함께 당신의 컨테이너 이름이 보일 것입니다.에 대한 자세한 내용은 다음과 같습니다.
언급URL : https://stackoverflow.com/questions/32073971/stopping-docker-containers-by-image-name-ubuntu
'itsource' 카테고리의 다른 글
동면 상태의 스프링 부츠에서 호출을 구현하는 방법 (0) | 2023.10.24 |
---|---|
DTD에서 PCDATA와 CDATA의 차이 (0) | 2023.10.19 |
MySQL에서 ibtmp1 파일을 정리하거나 크기를 조정하는 방법은 무엇입니까? (0) | 2023.10.19 |
wooCommerce에서 add_to_cart() 메서드를 사용하는 방법은 무엇입니까? (0) | 2023.10.19 |
파워셸을 사용하여 폴더의 내용을 다른 특정 폴더에 복사하는 방법? (0) | 2023.10.19 |