이런 일이 발생하면 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 (( $? ))
) 사용하세요.bash
ksh93
(( ... ))
컨테이너 이미지가 존재 하면 문자열을 반환하고 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를 가정해야 하는 경우에만 스크립트 내에서 사용하는 것이 좋습니다. 루트가 아닌 사용자).sudo
sudo
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