Match ends, Millwall 1, Cardiff City 1.
Cardiff missed the chance to move level with second-placed Derby as Millwall battled to a point on the night veteran Tim Cahill made his second Lions debut.
Junior Hoilett drilled in the opener after Mahlon Romeo was caught in possession, as Millwall began sloppily.
But the hosts fought back in the first half and were rewarded when Lee Gregory turned in Jed Wallace's cross.
The Londoners edged a scrappy second half but were kept out by keeper Neil Etheridge, as Cardiff stayed fourth.
However, Bluebirds boss Neil Warnock criticised referee Keith Stroud for denying the visitors victory by ruling out a strike by Sol Bamba on 83 minutes.
The centre-back acrobatically smashed home the ball from close range, but Stroud had blown his whistle moments before to give Cardiff a free-kick for a robust challenge by Steve Morison on Joe Bennett on the edge of the area.
Earlier Etheridge had made two smart saves, palming a shot from Ben Marshall behind and scrambling down to his left to stop a deflected effort from Wallace.
Australia international Cahill came off the bench in second-half stoppage time, but the veteran forward was unable to make an impact in his first appearance for Millwall since the 2004 FA Cup final.
Millwall manager Neil Harris told BBC Radio London:
"We probably got away with one with the goal that was disallowed. I feel for Cardiff in some sense because they are probably on the wrong end of a decision.
"We had a very similar one at Brentford where we scored a good goal and it was pulled back, so that probably evens that one up for the season.
"I'm really pleased with a point as it was a poor opening 20 minutes by us and a poor 15 minutes to finish.
"We showed real quality up to half-time but didn't build on that momentum in the second half, and that is credit to Cardiff."
Cardiff City boss Neil Warnock told Sky Sports:
"I think it is appalling at this level. Sol is going to shoot and then he blows.
"I don't accept that. He is a really experienced referee and I feel let down. He cost us the game.
"We are fighting to get in the Premier League. But for the referee it would have been three points."
- 12RomeoBooked at 2mins
- 35CooperBooked at 71mins
- 14J Wallace
- 44MarshallSubstituted forOnyedinmaat 79'minutes
- 9GregorySubstituted forCahillat 90'minutes
- 5Ecuele Manga
- 24GrujicSubstituted forHalfordat 77'minutes
- 19Mendez-LaingSubstituted forDamourat 78'minutes
- 44MadineSubstituted forZohoreat 82'minutes
- Keith Stroud
- Shots on Target
Second Half ends, Millwall 1, Cardiff City 1.
Attempt blocked. Callum Paterson (Cardiff City) right footed shot from the centre of the box is blocked.
Foul by Jed Wallace (Millwall).
Bruno Ecuele Manga (Cardiff City) wins a free kick in the defensive half.
Attempt missed. Callum Paterson (Cardiff City) left footed shot from the left side of the box is close, but misses to the left.
Fred Onyedinma (Millwall) wins a free kick in the defensive half.
Foul by David Junior Hoilett (Cardiff City).
Foul by Jake Cooper (Millwall).
Sean Morrison (Cardiff City) wins a free kick in the defensive half.
Substitution, Millwall. Tim Cahill replaces Lee Gregory.
Mahlon Romeo (Millwall) wins a free kick in the defensive half.
Foul by Kenneth Zohore (Cardiff City).
Corner, Cardiff City. Conceded by Jed Wallace.
Attempt blocked. Callum Paterson (Cardiff City) header from the centre of the box is blocked. Assisted by Sean Morrison with a headed pass.
Corner, Cardiff City. Conceded by George Saville.
Attempt missed. Callum Paterson (Cardiff City) header from the centre of the box is too high following a set piece situation.
Attempt blocked. David Junior Hoilett (Cardiff City) right footed shot from outside the box is blocked.
Delay over. They are ready to continue.
Delay in match Joe Bennett (Cardiff City) because of an injury.