In a whirlwind start to the match Hoops striker Moussa Dembele gave the home side the lead in the third minute before Fernandinho equalised eight minutes later.
Left-back Kieran Tierney’s 20th-minute shot deflected in off City winger Raheem Sterling, who then levelled again for the visitors with a well-taken goal.
Dembele made it 3-2 with less than two minutes played of the second half before Nolito equalised again in the 55th minute.
The result ends City’s winning run under Pep Guardiola — 10 games before they travelled to Glasgow — and it was no more than the Scottish champions deserved.
Brendan Rodgers’ side were hammered 7-0 in Barcelona in their Group C opener earlier in the month but he and the supporters will have been encouraged by the determination shown by the Scottish champions during an exhilarating game.
As Rodgers had confirmed pre-match, Craig Gordon took over from Dorus de Vries in the Celtic goal, former Manchester City defender Kolo Toure replaced Jozo Simunovic while Dembele was preferred to Leigh Griffiths as the lone striker.
City were without club captain Vincent Kompany, Kevin De Bruyne and Fabian Delph but still had plenty of talent on show in the shape of David Silva, Sergio Aguero and Sterling, the latter having played under Rodgers at Liverpool.
Rain cascaded down in the lead up to kick-off and then the noise took over as Celtic stormed into an early lead. Scott Sinclair’s free-kick from 35 yards was played wide to James Forrest and when his first-time volley was headed towards goal by defender Erik Sviatchenko, it was chested in by Dembele.
Shell-shocked City had yet to settle before they almost found themselves two down. Tom Rogic’s free-kick into the box ended up at the feet of Toure whose shot on the turn was parried behind by goalkeeper Claudio Bravo for the first of a couple of corners, which City survived.
The visitors drew level during a brief spell of pressure when Fernandinho took the sting out of a long-range effort by team mate Aleksandar Kolarov, turned, and knocked the ball past Gordon.
There was barely time for supporters or players to breathe. Moments later, Rogic’s curling free-kick from 25 yards missed the far post by inches but when he set up Tierney on the break the Scotland defender’s shot nestled behind Bravo after taking a nick off Sterling.
But back came City and Ilkay Gundogan’s drive smacked the top of the bar but Italian referee Nicola Rizzoli had blown for an infringement. However, in the 28th minute, after Dembele was short with a pass to skipper Scott Brown, Silva released Sterling and he cleverly turned inside Tierney before slipping the ball past Gordon from 12 yards.
Dembele started the second-half as he did the first, taking advantage of Kolarov’s miskick in front of goal from Tierney’s cross, to hook the ball past the helpless Bravo.
More mayhem ensued in the stands. Gordon pushed a Gundogan free-kick from 20 yards past the post as the Premier League leaders responded once more but their third equaliser came after Gordon had parried an angled-drive by Aguero out to Nolito who slotted the ball into the back of the net.
For the first time in the game City began imposing themselves, pushing Celtic back towards their own goal. Fernandinho fired just over from 25 yards in the 83rd minute and the Glasgow side survived few nervy moments — Gordon made a great save from Gundogan’s deflected drive — before the final whistle brought a huge and deserved round of applause from everyone who had witnessed a remarkable match.
Gordon, Lustig, Toure, Sviatchenko, Tierney, Brown, Rogic (Armstrong 57), Bitton (Griffiths 84), Sinclair, Dembele, Forrest (Roberts 80).
Bravo, Zabaleta, Otamendi, Kolarov, Clichy (Stones 73), Sterling, Gundogan, Fernandinho, Silva, Nolito (Fernando 76), Aguero.
Nicola Rizzoli (Bologna).