$? não é uma string, mas o status de saída de sudo (neste caso). Para usá-lo corretamente, compare-o com zero com -gt ou use if (( $? )) (em um shell como bash ou ksh93 que faz avaliação aritmética com (( ... )) ).
Se sudo docker images -q nginx der a você uma string se o container existir e nada se não, então você pode armazenar isso em uma variável e ver se ela está vazia ou não:
result=$( sudo docker images -q nginx )
if [[ -n "$result" ]]; then
echo "Container exists"
else
echo "No such container"
fi