Some people (including me) think that "canonical" should be synonymous with "natural on isomorphisms" or "Functorial on isomorphisms" (depending on if you are talking of a "canonical object" or a "canonical arrow"). Doing so solves the problem of variance in the definition:.
To be clear, by "Functorial on isomorphism" I justs means that we have a functor $F:Core(C) \to D$ where $Core(C)$ is the subcategory of $C$ containing all objects but only isomorphisms as arrows. And by "Natural on isomorphisms", I'm asking for things that are natural transformation between such functors, i.e. that satisfies the naturality condition only with respect to isomorphisms.
If you look at the category of finite dimensional vector spaces and linear isomorphisms between them, here $V \mapsto V^*$ can be made into an actual (covariant) endofunctor of this category as you can fix the contravariance by inverting the morphisms, so that an invertible arrow $f:V \to W$ induces $(f^*)^{-1} : V^* \to W^*$.
And there you can concretely show that there is no natural isomorphism between this functor and the identity.
Indeed, chosing an isomorphism $V \simeq V^*$ gives you a non-degenerate bilinear form on $V$ and you can always find an automorphism of $V$ that does not preserves this bilinear form, which is exactly what the naturality on isomorphisms would mean! So at the end of they day, one recovers exactly the argument that Paul Taylor or Chris Schommer-Pries made in the comments, but starting with a concrete categorical definition of "canonical".