Moussa Dembele got the hosts off to a dream start, netting inside three minutes as he diverted a Erik Sviatchenko shot past Claudio Bravo to lift the roof off Celtic Park.
Defying the odds, Celtic were well in control in the early going, but City hauled themselves back on level terms with their first meaningful attack. After the home defence failed to properly clear a corner, Aleksandar Kolarov low shot was controlled by Fernandinho, who’d broken the offside trap, and he sent Craig Gordon the wrong way from the centre of the penalty area.
Rather than let the equaliser curtail their attacking impetus, Celtic continued to go at their visitors and were ahead once more when Tom Rogic fed Kieran Tierney and the defender’s low cross was deflected in at the front post by Raheem Sterling.
As great as Celtic looked going forward, they were vulnerable at the back, and it showed when City turned a misplaced pass from Dembele into the equaliser, as Sterling got in behind before changing direction and passing beyond Gordon.
Celtic took to the second half with renewed impetus and were back in front within two minutes of the restart. Kolarov missed Tierney’s cross, allowing Dembele to score his second of the evening with a terrific overhead kick.
Again the lead didn’t last 10 minutes, but at least on this occasion Celtic could console themselves with the knowledge there was little they could have done to halt a rapid, one-touch move around the penalty area which ended with Nolito following up on a great save by Gordon.
İlkay Gündoğan had the chance to win it right on 90 minutes as space opened up on the edge of the penalty area, though Gordon was equal to the deflected effort.