The hosts were a threat from Jed Wallace's set-pieces, twice forcing the Iron to head over their own crossbar.
Lee Gregory missed the game's biggest chance, his low shot saved by the legs of Joe Anyon when put in one-on-one.
Skipper Tony Craig volleyed over for Millwall as they pressed, while the visitors had just one shot on target.
The second leg will be played at Glanford Park on Sunday, with only champions Sheffield United boasting a better home record than Scunthorpe in the division.
Gregory was put through by Wallace for the only real opening, but his first touch was unconvincing and Anyon was able to close the angle and block.
In a niggly tie with five bookings, Josh Morris eventually tested Millwall keeper Jordan Archer after 80 minutes, but his long-range free-kick was easily held.
It is only the fifth time that Scunthorpe have drawn 0-0 in Graham Alexander's 64 matches in charge of the side.
Millwall manager Neil Harris told BBC Radio London:
"I thought we had everything. We created some chances, just not as many as we'd like to - all that was missing was a goal.
"I'm not disappointed with that at all - a clean sheet I'm really pleased with and I think we're in a really good position going into the second leg, where the onus will be on them.
"All I will bemoan is just a little bit of composure and a little lack of quality at times in certain areas, but I think that's down to Scunthorpe's work-ethic as well."
Scunthorpe boss Graham Alexander told BBC Radio Humberside:
"It's a good result - we haven't done anything yet, as in the overall tie, but it's still there to play for.
"We came here and put on a real solid, professional away performance to get the clean sheet - that was important for us.
"We knew we weren't going to win the overall tie tonight, we didn't want to lose the overall tie tonight, so that's where we are."
Match ends, Millwall 0, Scunthorpe United 0.
Second Half ends, Millwall 0, Scunthorpe United 0.
Corner,  Millwall. Conceded by Murray Wallace.
Foul by Ivan Toney (Scunthorpe United).
Mahlon Romeo (Millwall) wins a free kick on the right wing.
Ivan Toney (Scunthorpe United) wins a free kick in the attacking half.
Foul by Byron Webster (Millwall).
Substitution, Scunthorpe United. Sam Mantom replaces Stephen Dawson because of an injury.
Delay over. They are ready to continue.
Delay in match  (Scunthorpe United).
Tony Craig (Millwall) is shown the yellow card for a bad foul.
Stephen Dawson (Scunthorpe United) wins a free kick on the right wing.
Foul by Tony Craig (Millwall).
Foul by Josh Morris (Scunthorpe United).
Mahlon Romeo (Millwall) wins a free kick in the defensive half.
Attempt saved. Josh Morris (Scunthorpe United) left footed shot from outside the box is saved in the bottom left corner.
Stephen Dawson (Scunthorpe United) wins a free kick in the attacking half.
Foul by Shaun Williams (Millwall).
Attempt saved. Steve Morison (Millwall) right footed shot from the centre of the box is saved in the centre of the goal. Assisted by Lee Gregory with a headed pass.
Substitution, Millwall. Aiden O'Brien replaces Shane Ferguson.
Attempt missed. Mahlon Romeo (Millwall) right footed shot from outside the box is high and wide to the right.
Josh Morris (Scunthorpe United) wins a free kick in the defensive half.
Foul by Jed Wallace (Millwall).
Shane Ferguson (Millwall) is shown the yellow card for a bad foul.
Neal Bishop (Scunthorpe United) wins a free kick in the defensive half.
Foul by Shane Ferguson (Millwall).
Ivan Toney (Scunthorpe United) wins a free kick in the defensive half.
Foul by Mahlon Romeo (Millwall).
Foul by Ivan Toney (Scunthorpe United).
Shaun Williams (Millwall) wins a free kick in the defensive half.
Ivan Toney (Scunthorpe United) wins a free kick in the defensive half.
Foul by Shaun Hutchinson (Millwall).
Murray Wallace (Scunthorpe United) is shown the yellow card.
Foul by Murray Wallace (Scunthorpe United).
Steve Morison (Millwall) wins a free kick in the attacking half.
Foul by David Mirfin (Scunthorpe United).
Lee Gregory (Millwall) wins a free kick in the attacking half.
Substitution, Millwall. Mahlon Romeo replaces Shaun Cummings because of an injury.
Delay over. They are ready to continue.
Delay in match Shaun Cummings (Millwall) because of an injury.
Millwall were held to a lacklustre goalless draw at home in the first leg of their League One play-off semi-final by a determined Scunthorpe side.