Aurelien Tchouameni put France ahead on 17 minutes with a rasping drive before Harry Kane levelled matters on 54 minutes from the spot.
Olivier Giroud headed France ahead on 78 minutes but the Three Lions had a golden chance to tie matters again when Mason Mount earned another penalty four minutes later.
But Kane, usually so reliable from 12 yards, skied his effort over the bar at Al Bayt Stadium.
Phil Foden, John Stones and Kyle Walker all started for England while Jack Grealish came on in injury-time for the Three Lions. Kalvin Phillips was an unused substitute.
It was a cagey start to the game, as you’d expect in a tie between these two football foes.
Foden saw a shot from just outside the box charged down on four minutes while Giroud had his diving header fly straight at Jordan Pickford in the Three Lions goal.
Bukayo Saka believed he’d earned a free-kick in dangerous territory but, as the referee waved play on, the French countered and Tchouameni opened the scoring on 17 minutes with a well-driven strike that flew through Jude Bellingham’s legs and past Pickford.
England upped their game after that initial setback and looked more dangerous for the remainder of the half.
Luke Shaw’s free-kick on 21 minutes flew straight at Hugo Lloris while the Tottenham keeper denied his club team-mate Kane when the striker burst through moments later.
There were England shouts for a spot-kick on 26 minutes as Kane appeared to have been upended on the penalty box line but the referee said no – and a VAR check rapidly agreed with the official.
Lloris again denied Kane on 29 minutes when the Three Lions captain’s deflected effort was palmed away from danger.
Kylian Mbappe, well marshalled by Walker throughout, did have a chance to double the lead on 39 minutes, after a neat free-kick routine by the French, but his shot inside the box ballooned over.
England came out after the half-time break in determined mood as they aimed to get back into the contest.
Lloris produced a superb save from a rasping Jude Bellingham strike from just outside the box on 47 minutes and then Saka, a constant thorn in the French side, earned England a penalty on 52 minutes as he drove inside before being upended.
After a two-minute wait to take it, Kane made no mistake as he fired left past Lloris.
No sooner had England drawn level than Pickford was called into action as he produced a fine save to deny an Adrien Rabiot shot on the volley on 55 minutes.
Despite that momentary concern, it was the Three Lions who moved into the ascendancy, attacking strongly in search of a winner.
Harry Maguire came so close to giving England the lead on 70 minutes as his powerful header shaved the post.
Saka was so close to putting England ahead on 72 minutes but he was beaten to the ball when well-placed.
Pickford produced a brilliant save as he pushed away a slicing left foot volley from Giroud on 77 minutes but, moments later, it was Giroud who gave France the lead when he headed expertly home from a pinpoint Antoine Griezmann cross from the left.
There was fresh hope for the Three Lions when Mason Mount earned a second penalty when he was barged off the ball by Lucas Hernandez in the box.
But Kane uncharacteristically fired his effort over the bar on 84 minutes.
Gareth Southgate’s men pushed for a leveller despite the disappointment and it was substitute Marcus Rashford who so nearly took the game to extra-time but his free-kick from just outside the box flew agonisingly over.
France will now go through to face Morocco after they beat Portugal in the day’s other last-eight encounter.
Youssef En-Nesyri’s 42nd minute goal set up for the tie with the French on Wednesday 14 December, kick-off 19:00 at Al Bayt Stadium.
The winner of that one will face either Argentina or Croatia, who meet the previous night, on Tuesday 13 December, kick-off 19:00 at Lusail Stadium.
The world champions will be crowned on 18 December.