The home side had early chances, David Worrall heading over from Joe Martin's cross, while Byron Webster wasted an opportunity from a Worrall corner inside the first 15 minutes.
But Coventry led after 22 minutes through Marvin Sordell's first goal for the club.
The forward showed strength under pressure to swivel and fire home from 25 yards for only the Sky Blues' third league goal this term.
Coventry keeper Reice Charles-Cook's attempted clearance played in O'Brien before half-time, but he dragged his shot wide.
The visitors repeatedly went close after the break, Sordell's header trickling inches wide before Tony Craig deflected his shot behind minutes later.
Superb play from Steve Morison on 71 minutes, skinning Jordan Turnbull before setting up O'Brien from close range, set up a grandstand finish.
Substitute Jodi Jones' free-kick forced a quality save from Jordan Archer, while Morison headed narrowly wide.
Reports supplied by the Press Association.
Match ends, Millwall 1, Coventry City 1.
Second Half ends, Millwall 1, Coventry City 1.
Attempt missed. Steve Morison (Millwall) right footed shot from outside the box misses to the right.
Jamie Sterry (Coventry City) is shown the yellow card for a bad foul.
Shane Ferguson (Millwall) wins a free kick on the left wing.
Foul by Jamie Sterry (Coventry City).
Callum Butcher (Millwall) wins a free kick in the attacking half.
Foul by Gael Bigirimana (Coventry City).
Substitution, Millwall. Jamie Philpot replaces Aiden O'Brien because of an injury.
Attempt missed. Callum Butcher (Millwall) header from the centre of the box is too high.
Shaun Williams (Millwall) wins a free kick in the attacking half.
Foul by Devon Kelly-Evans (Coventry City).
Attempt missed. Steve Morison (Millwall) header from the right side of the six yard box misses to the right.
Corner,  Coventry City. Conceded by Jordan Archer.
Jodi Jones (Coventry City) wins a free kick in the defensive half.
Foul by Callum Butcher (Millwall).
Attempt saved. Steve Morison (Millwall) right footed shot from the centre of the box is saved in the centre of the goal.
Corner,  Millwall. Conceded by Gael Bigirimana.
Corner,  Millwall. Conceded by Devon Kelly-Evans.
Attempt missed. Jamie Sterry (Coventry City) right footed shot from outside the box is high and wide to the right.
Substitution, Coventry City. Daniel Agyei replaces Kyel Reid.
Corner,  Coventry City. Conceded by Joe Martin.
Joe Martin (Millwall) is shown the yellow card for a bad foul.
Jodi Jones (Coventry City) wins a free kick in the defensive half.
Foul by Joe Martin (Millwall).
Substitution, Millwall. Callum Butcher replaces Ben Thompson.
Substitution, Coventry City. Jodi Jones replaces Ruben Lameiras.
Foul by Byron Webster (Millwall).
Marvin Sordell (Coventry City) wins a free kick in the defensive half.
Goal!  Millwall 1, Coventry City 1. Aiden O'Brien (Millwall) right footed shot from the centre of the box to the bottom left corner. Assisted by Steve Morison.
Substitution, Coventry City. Devon Kelly-Evans replaces Lewis Page.
Attempt missed. Sam Ricketts (Coventry City) header from the right side of the six yard box is close, but misses to the right following a corner.
Corner,  Coventry City. Conceded by Ben Thompson.
Attempt blocked. Ruben Lameiras (Coventry City) right footed shot from outside the box is blocked.
Substitution, Millwall. Shane Ferguson replaces Fred Onyedinma.
Attempt missed. Shaun Williams (Millwall) right footed shot from outside the box is high and wide to the left.
Vladimir Gadzhev (Coventry City) wins a free kick in the defensive half.
Foul by Shaun Williams (Millwall).
Attempt missed. Steve Morison (Millwall) right footed shot from outside the box misses to the left.
Attempt missed. Marvin Sordell (Coventry City) header from very close range misses to the right following a corner.
Aiden O'Brien's second-half tap-in denied Coventry their first win of the season as Millwall rescued a point.