The Hoops gifted Brandao a fourth-minute opener, and their prospects seemed to be disintegrating as Lee Naylor and John Kennedy both had to be carried off injured.
But Jiri Jarosik volleyed a 45th-minute equaliser, and then Donati put them three points above Shakhtar with virtually the last kick of the game.
Shakhtar's 2-0 win over Celtic in the opening group game had given Mircea Lucescu's side the edge in qualification had tonight's match stayed level - which it seemed destined to for most of a tight second half.
Artur Boruc and Paul Hartley shook off fitness concerns to return to the starting line-up, but the positive mood was soon punctured.
Brandao had given Shakhtar an early lead in Ukraine when he capitalised on a Celtic error - and history repeated itself.
Kennedy was under little pressure after a hopeful long ball to the edge of the Celtic box. But he headed his clearance against the Brazilian, whose finish was too strong for Boruc.
The home side were making basic errors and suffered a further blow in the 16th minute when Naylor left the field on a stretcher.
Donati came on in midfield, while Hartley slotted in at left-back.
But Aiden McGeady and Scott Brown began to get hold of the ball to push the visitors back, midway through the half.
Scott McDonald shot narrowly over from 25 yards, and Jan Vennegoor of Hesselink met Gary Caldwell's cross eight yards out - only to glance his header inches wide.
The visitors continued to impress in possession, though, and Darijo Srna was not far away with a 20-yard volley after Boruc had punched clear a free-kick.
Boruc then defied Brandao twice in 60 seconds, from corners on either side.
The Pole blocked from close range, after Jadson's near-post corner fell to the feet of his fellow Brazilian, and he then touched over a header following Srna's delivery.
Kennedy's night got even worse when he was carried off five minutes from half-time after going up for a high ball, and Steven Pressley came on for his first appearance of the season following back surgery.
Jarosik was booked for sliding in on Olexandr Kucher, who became the latest Donetsk player to waste some time by getting treatment.
But the Celtic midfielder levelled with a powerful left-foot volley in the 45th minute, after Srna and Dmytro Chygrynsky had collided while trying to clear Caldwell's long ball.
Jarosik should have put Celtic in front during five minutes of injury-time when McGeady's superb back-post ball found him unmarked - but the Czech international somehow put his diving header off target.
Celtic started slowly after the break, but Vennegoor of Hesselink forced Andriy Pyatov to push out his volleyed cross - and Shakhtar were relieved the rebound did not fall more kindly for the Hoops.
The Dutchman was next in the book for persistent fouling as Celtic found it difficult to penetrate the visiting defence.
Jadson shot over from 25 yards, after intercepting McGeady's pass to Jarosik - but chances were scarce at either end.
McDonald and McGeady could not get shots beyond a wall of orange, after Hartley's free-kick.
Celtic did create a good chance in the 74th minute - and it fell to Jarosik again.
Hartley's near-post corner found the former Chelsea man, but he headed over under little pressure from eight yards.
The Ukrainians sat deeper, and Gordon Strachan played his final card by putting on Chris Killen for Vennegoor of Hesselink in the 79th minute.
Gary Caldwell was booked as a frustrated Celtic sensed their chances were slipping away, and Donetsk came close to a late winner when Brandao blazed over from eight yards after substitute Olexandr Gladkiy's cut-back.
But Donati found the bottom corner from McGeady's ball to the edge of the box at the end of two minutes of injury time, to send the Celtic fans into raptures.
Any reproduction, publication or redistribution of this material without the written agreement of 365 Media Group is strictly forbidden.