Most nouns in Latin (and e.g. Spanish) have only one gender. Some other have two (epicene nouns). canis is one example (Separate Q: are there more examples?)
I wonder why is that the case for canis. My naive guess is that it is because of their proximity with humans. That is at least what I get from Spanish. In effect, in Spanish dog also has both cases (perro y perra). Same with cats (gato y gata), whereas in Latin cat is only feminine. Interestingly, most of other animals in Spanish only have one gender, suggesting to me the reason for this is precisely because of their proximity with humans (related question here).
However, in Spanish the words are different, whereas in Latin the word is the same. So maybe the reason is different.