Watford impressed in the opening stages, keeping Millwall pegged back with some neat football that yielded the opening chance, which Almen Abdi hit over.
Millwall’s Chris Wood went close to grabbing the first goal, seeing his shot blocked after the ball ricocheted off Lloyd Doyley, before Mark Beevers headed over from the resulting corner.
As the first period drew towards a conclusion, the Lions continued to edge proceedings and almost went ahead as Liam Trotter’s 30-yard piledriver skimmed the outside of the post.
The home side, though, had the better of the play at the end of the half; after Abdi’s low shot was saved, Beevers had to be on high alert to head Fernando Forestieri’s clever chip off the line.
The Lions re-emerged from the interval positively and came agonisingly close to going ahead, only for Wood to hit straight at Manuel Almunia.
The increasingly end-to-end nature of the game continued as Troy Deeney hit narrowly wide for the Hornets.
As the second half wore on, both sides were unwilling to drive forward, seemingly more worried about conceding than displaying invention.
That meant chances were increasingly few and far between, making Forestieri’s wasteful effort – he hit a good opening wide – all the more frustrating.
Seemingly unwilling to let the game meander into a draw, Watford played with more urgency following the introduction of Matej Vydra without creating any real openings.
That changed in the dying moments when Abdi rattled the woodwork before Daniel Pudil hit narrowly wide as the Hornets had to settle for a point.