Skip to main content

Bash, Docker: check container existence and status

· 3 min read
Yaroslav Grebnov
Golang developer, SDET

Examples of how to check if a Docker container with a given name exists and get its status in bash scripts.

Check if a Docker container exists

Create and run a container ( I will use alpine:latest in my examples):

docker run -it --name testContainer alpine:latest ash

docker ps shows that the testContainer status is Up:

docker ps

testContainer status is Up

The simplest implementation of the container check is the following:

if [ $( docker ps -a | grep testContainer | wc -l ) -gt 0 ]; then
echo "testContainer exists"
else
echo "testContainer does not exist"
fi

Output:
testContainer exists

The check consists of the following steps. We start by outputting a list of containers with any status, we search for a testContainer text in the output and we count the resulting lines. If the number of lines is greater than zero, we output testContainer exists. otherwise, we output testContainer does not exist.

If you have several containers with similar names running at the same time, or you have a container with the name testContainer2, the check above may work not as expected. In order to have more accurate results of the check, we will replace the grep by the docker ps command filter option:

if [ $( docker ps -a -f name=testContainer | wc -l ) -eq 2 ]; then
echo "testContainer exists"
else
echo "testContainer does not exist"
fi

Output:
testContainer exists

Here, we filter the list of containers with any status by the name testContainer and count the resulting lines. Please note that as docker ps output has a header line, we compare the resulting number of lines with 2. This check provides more accurate results.

Check Docker container status

Now we will extend our container existence check by adding a step of getting the status of the container in question.

output=$( docker ps -a -f name=testContainer | grep testContainer 2> /dev/null )
if [[ ! -z ${output} ]]; then
echo "A container with a name: testContainer exists and has status: $( echo ${output} | awk '{ print $7 }' )"
else
echo "Container with a name: testContainer does not exist"
fi

Output:
A container with a name: testContainer exists and has status: Up

The docker ps output with the list of containers is stored in a variable output. If a container with the given name is available, the output contains only one line containing the container name. The containers list header line is suppressed. We are also filtering out the stderr (it is sent to /dev/null). We do this because later we check the output variable value for emptiness. If the variable has a non-empty value, we proceed to getting the container status. We do this by using a simple awk command.