Reading came from behind to deservedly take a point from a topsy-turvy affair at The Den. Jed Wallace's first half free kick had handed the hosts the lead, before Lucas Joao levelled at the start of a second half that saw both sides earn good chances to win it.
Rafael was the first of the two goalkeepers to get a handle of the ball, the Brazilian carefully watching a bobbling strike from Murray Wallace into his arms.
Holmes then did well to clear a dangerous cross from the right, conceding a corner as his left-footed swipe clear ricocheted into a red shirt and flew behind. Rafael won a free kick from the set piece as he was fouled as he rose fo claim the ball at the back post.
Ten minutes in and Meite won a free kick as he ran at Jake Cooper - the Millwall defender dragging him down as Yakou got away from his man and scurried towards goal. Ejaria's deep set piece was met by Holmes at the back post but he couldn't heep a difficult header down as he looked to test Bialkowski.
Semedo's slide took the sting out of a Shaun Williams drive from 25 yards out and Rafael smothered in well with a low dive to his left. At the other end, a Holmes cross from the right wasn't dealt with and it almost fell for Joao who was caught off guard and couldn't control the ball as it skidded through the Millwall box.
Midway through the first half, Meite and Semedo combined from a throw in for the former to drive left-footed at goal from distance - but Bialkowski was down well to save it to his left.
Millwall enjoyed a good spell of pressure but an organised Royals defence refused to offer them an opportunity and Joao nearly set Meite in on goal with an early pass that was just over-hit to allow the Millwall keeper to come off his line and claim ahead of the Royals forward.
On the stroke of half time, Rinomhota bundled Parrott over as he looked to shoot at goal. Jed Wallace took aim and lashed a lovely free kick over the wall and into the top left corner to give the hosts the lead.
Half-time: Millwall 1-0 Reading
Reading began the second half on the front foot, Michael Olise entering the fray in place of Semedo. Laurent's low ball into Meite created an opportunity for Ejaria to shoot but he didn't get enough behind it to trouble Bialkowski too much.
And their positive start paid off. Olise played a lovely flicked ball in behind the Millwall defence for Joao who strode onto it. He stabbed it goalwards with his left foot from a narrow angle and it came off the keeper's legs and rippled the net for 1-1.
The home side looked to respond and Rafael did well to cling onto a Cooper header, the former Royal connecting with a corner but directing his downward header straight at the Reading keeper.
He made a much more important save with just over 20 minutes remaining, finger-tipping a Bodvarsson shot over his crossbar when it seemed the former Royals striker would hand the hosts the lead.
In response a powerful direct run from Joao was halted illegally by Hutchinson on the corner of the Millwall area. Ejaria lined it up but arced his free kick just over the top right corner.
Bodvarsson found some space in behind the Reading back line again but this time from an impossible angle skied his effort high into the stands.
And Ryan Leonard had a great chance to give Millwall the lead with ten minutes remaining when he arrived unmarked in the box to arrow a diving header over the crossbar from six yards out.
Millwall started to go aerial and trouble the Reading defence in the dying stages and in the first minute of injury time Wallace came close to stealing it. He slid onto a low cross from Bodvarsson but Rafael got down well to save it.
Reading then came a whisker away from taking victory with the last kick of the game. Joao with the ball at his feet on the right side of the goal, had it all to do - he dragged a shot across Bialkowski but inches side of the left post.
Full-time: Millwall 1-1 Reading
Millwall: Bialkowski, M Wallace, Hutchinson (c), Cooper, Williams, J Wallace, Thompson (Smith 75), Malone (Ferguson 75), Leonard, Woods, Parrott (Bodvarsson 63).
Unused subs: Fielding, Smith, Ferguson, Pearce, Brown, Skalak, Burey, Muller.
Yellow: Cooper, Williams, Hutchinson, Leonard.
Goals: J Wallace (45)
Reading: Rafael, Holmes, Richards, Moore (c), Morrison, Rinomhota, Laurent, Semedo (Olise HT), Meite (Baldock 90), Ejaria, Joao.
Unused subs: Walker, Esteves, Watson, Gibson, Tetek, Aluko, Onen.
Yellow: Semedo, Morrison, Ejaria, Holmes.
Goals: Joao (53)
This match report was brought to you by WHATJOBS. Learn more at www.WHATJOBS.com