Crewe broke the deadlock in the 12th minute when John Brayford's free-kick from inside his own half caused panic in the Lions' penalty area, enabling Dennis Lawrence to capitalise on the confusion and head the visitors in front.
Tresor Kandol missed three opportunities to equalise before the Lions finally drew level five minutes before the break.
James Bailey scrambled Marc Laird's initial shot off the line, but the clearance landed straight at the feet of Laird and the midfielder made no mistake second time around by firing low into the back of the net.
And Millwall went in front in first-half stoppage time when Andy Frampton headed home from Scott Barron's free-kick.
Crewe were back on level terms 13 minutes into the second half through Danny Shelley, who drilled in a free-kick from 20-yards beyond goalkeeper David Forde.