Canada were denied an early lead by Real Madrid goalkeeper Thibaut Courtois, who dived low to his right to keep out an Alphonso Davies' penalty.
The result extended Belgium's unbeaten record in the World Cup group stage to 13 matches, a run that dates back to 1998.
Canada, playing on football's biggest stage for the first time since 1986, continue their search for a first World Cup goal. On Wednesday's form, they will be odds-on to break their duck against Croatia or Morocco in their remaining group matches.
Canada took the initiative from outset at the Ahmad bin Ali Stadium in Doha, rushing forward in numbers and unsettling a Belgium defense that was repeatedly caught off guard.
The North American side appeared set to take the lead in the 10th minute when referee Janny Sikazwe awarded a penalty for a Yannick Carrasco handball. But Courtois was equal to the task, comfortably saving Davies' resultant spot-kick.
Belgium's defense was under siege and Courtois again came to the rescue by denying Richie Laryea with his right leg after another threatening Canada foray.
Roberto Martinez's men struggled to maintain possession, with midfielder Kevin De Bruyne often drawn deep into his own half, blunting his attacking threat.
Belgium struck against the run of play when Alderweireld floated an inch-perfect pass into the path of an onrushing Batshuayi, who sent an unstoppable shot past Milan Borjan.
Canada squandered another scoring opportunity in second-half stoppage time as Tajon Buchanan's sliding shot from point-blank range sailed over the bar after Laryea's cross from the right flank.
Canada continued to rattle Belgium's defense after the restart and Stephen Eustaquio found Jonathan David with a pinpoint cross only for the striker to misdirect his header at the far post.
De Bruyne's influence grew as the match progressed, even if his teammates couldn't capitalize on his sublime vision and passing.
Batshuayi failed to get a clean shot away after the Manchester City midfielder's probing run and cross, and the striker was again at fault when De Bruyne's dangerous long-range pass bounced out of play off his shin.
Belgium struggled to put the result beyond doubt and Canada almost equalized in the 80th minute through David, whose threatening header was smartly kept out by Courtois.