Mbappe, outstanding in France’s opening Group D victory over Australia, was the star of the show again with two close-range finishes – his winner coming four minutes from time.
Denmark, who had beaten France twice in the Nations League this year, fell behind after 61 minutes but soon levelled through Andreas Christensen.
Mbappe’s double puts him alongside Pele as the only players to score seven or more World Cup goals before their 25th birthday.
The victory extended defending champions France’s World Cup winning streak to six games.
France named Raphael Varane in their starting line-up, the Manchester United defender’s first football since being injured at Chelsea on October 22 and leaving the Stamford Bridge pitch in tears.
Varane replaced Liverpool’s Ibrahima Konate while Theo Hernandez came in for his brother Lucas, who suffered an anterior cruciate ligament injury during the 4-1 win over Australia.
Christian Eriksen, Varane’s United team-mate, was part of a Denmark side seeking to improve on their opening goalless stalemate against Tunisia.
France took time to create chances but there was no doubting their aerial threat at Doha’s 974 Stadium.
Denmark scrambled clear after Adrien Rabiot headed Hernadez’s cross into Olivier Giroud’s direction and then when Varane flicked on Antoine Griezmann’s corner.
— FIFA World Cup (@FIFAWorldCup) November 26, 2022
Giroud was chasing the 52nd international goal that would take him clear of Thierry Henry as France’s all-time record scorer, but it was to prove a frustrating night for the former Arsenal and Chelsea forward.
There was a moment of huge controversy after 19 minutes as Mbappe tore on to Griezmann’s pass through the middle.
Christensen took decisive action by hauling down Mbappe and the Barcelona defender was spared a red card with two teammates around him.
But Mbappe was in full flow and might have been through on goal. France thought so, but their calls for a red card were ignored by Polish referee Szymon Marciniak.
Rabiot saw his header pushed out by Kasper Schmeichel before the Denmark goalkeeper stuck out a foot to stop Griezmann from profiting.
Denmark briefly broke out from their defensive shape as Pierre-Emile Hojbjerg and Andreas Cornelius created a counter-attack from nothing.
Hojbjerg fed Cornelius down the right but, with no-one for company alongside him, he fired wide from an acute angle.
The tricky Dembele set up France’s best chance of the first half five minutes before the break.
Dembele pulled the ball towards the penalty spot but the unmarked Mbappe’s composure let him down for once and the ball sailed over Schmeichel’s crossbar.
France breathed a sigh of relief when Jules Kounde caught Victor Nelsson on the ankle two minutes before half-time.
It was a poor challenge and perhaps worthy of more than the yellow card that Kounde received.
Denmark, as they had done against Tunisia, improved after the break and it was more of an even contest.
But Mbappe left Danish defenders trailing in his wake to test Schmeichel from 20 yards, the former Leicester goalkeeper taking no chances and punching the shot around a post.
Griezmann fired over with only Schmeichel to beat, but Mbappe finally found a way through from eight yards after exchanging passes with Hernandez.
Denmark were level within seven minutes as Andersen touched on Eriksen’s corner and Christensen stooped to head home from six yards.
Jesper Lindstrom had the chance to put Denmark ahead from close range, but Hugo Lloris batted away his effort.
Chances came and went for both sides in a thrilling finish before Mbappe settled the outcome by meeting Griezmann’s far-post cross with his thigh.