Shell: docker 컨테이너가 있는지 확인

Shell: docker 컨테이너가 있는지 확인

이런 일이 발생하면 bash 스크립트에서 어떻게 확인합니까?

sudo docker images -q nginx

컨테이너가 이미 존재한다는 것을 의미하는 결과 문자열을 제공합니다.

sudo docker images -q nginx
if [ $? != '' ]
then
    echo "existing"
else
    echo "missing

답변1

"Best Answer"에서 제안한 대로 시도했지만 컨테이너의 ID가 아닌 이미지의 ID만 반환합니다. 컨테이너가 실행 중인지 여부에 관계없이 항상 이미지 ID를 반환합니다.docker images -q "{Image Name}"

컨테이너가 실행 중인지 확인하려면 다음 명령을 적용해야 합니다.

도커 ps -q -f 이름="{컨테이너 이름}"

컨테이너가 존재하고 실행 중인 경우 컨테이너 ID를 반환합니다. 존재하지 않거나 존재하지만 중지된 경우 빈 문자열이 반환됩니다. 모든(실행 중 및 중지된) 컨테이너를 검색하려면 다음과 같이 "docker ps" 명령에 "-a" 매개변수를 사용합니다.

도커 ps -a -q -f 이름="{컨테이너 이름}"

컨테이너 ID와 같은 다른 필드로 검색할 수도 있습니다.

도커 ps -a -q -f id="{컨테이너 ID}"

자세한 내용은 다음을 참조하세요.공식 "docker ps" 문서.

답변2

$?문자열은 아니지만 sudo(이 경우) 종료 상태입니다. 올바르게 사용하려면 0 과 비교 -gt하거나 ( 또는 와 같은 산술 평가를 수행하는 셸에서 if (( $? ))) 사용하세요.bashksh93(( ... ))

컨테이너 이미지가 존재 하면 문자열을 반환하고 sudo docker images -q nginx, 존재하지 않으면 아무것도 반환하지 않습니다. 그런 다음 이를 변수에 저장하고 비어 있는지 확인할 수 있습니다.

result=$( sudo docker images -q nginx )

if [[ -n "$result" ]]; then
  echo 'Container image exists'
else
  echo 'No such container image'
fi

그러나 도구에는 일반적으로 암호에 대한 대화형 프롬프트가 필요하기 때문에 스크립트 내에서 사용하는 것이 어색하며, 스크립트 자체를 실행하는 데 이를 sudo사용하는 것이 더 좋습니다 . 그런 다음 다른 사용자의 ID를 가정해야 하는 경우에만 스크립트 내에서 사용하는 것이 좋습니다. 루트가 아닌 사용자).sudosudo

docker inspect컨테이너 정보를 확인하는 또 다른 명령:

docker inspect -f '{{.Config.Image}}' nginx

그러면 컨테이너의 컨테이너 이미지 해시가 제공됩니다 nginx. 또한 컨테이너가 존재하는지 확인하는 데 사용할 수 있는 올바른 종료 상태를 반환합니다.

if docker inspect -f '{{.Config.Image}}' nginx >/dev/null 2>&1
then
    echo 'Container image exists'
else
    echo 'Container does not exist'
fi

또는 출력 문자열을 선택하여 비어 있는지 확인할 수 있습니다.

result=$( docker inspect -f '{{.Config.Image}}' nginx 2>/dev/null )

if [[ -n "$result" ]]; then
  echo 'Container image exists'
else
  echo 'No such container image'
fi

/dev/null컨테이너 이미지가 존재하지 않으면 불평을 하기 때문에 표준 오류 스트림을 리디렉션하여 이를 폐기했습니다 .

docker inspect다음을 확인하여 컨테이너가 실행 중인지 확인할 수도 있습니다 {{.State.Running}}.

result=$( docker inspect -f '{{.State.Running}}' nginx )

if [[ $result == "true" ]]; then
  echo 'Container is running'
else
  echo 'Container is not running'
fi

답변3

이 시도

sudo docker inspect --format="{{.State.Running}}" $CONTAINER
# If the $CONTAINER is running or not and exists, $? is 0
# But If the $CONTAINER doesn't exist or was never created,
# $? is 1 on docker, or 125 on podman 
if [ $? -eq 0 ];
then
     echo "existing"
else
     echo "missing"
fi

관련 정보