Ilkay Gundogan’s second-half strike was cancelled out by Manor Solomon as City failed to spark at the Etihad Stadium but, with Dinamo Zagreb losing to Atalanta, the result was enough to secure top spot in Group C.
There was little else to excite amid a flat atmosphere but Shakhtar’s performance kept their hopes of joining City in the last 16 very much alive.
As usual, City enjoyed a lot of possession but they lacked their usual potency while Shakhtar were not cowed by their failure to make much of an impression in their previous games against their hosts.
The Ukrainians, paired with City for a third consecutive year, were beaten 3-0 by Pep Guardiola’s men in September and thrashed 6-0 on their last visit to the Etihad Stadium a year ago.
They were determined and caught City a number of times with what seemed like a plan to lob balls over the top of the home defence.
Ederson raced out of his area to meet one such pass but completely missed the ball allowing Tete to break clear, but the Shakhtar forward’s shot was turned behind by Fernandinho.
Tete had another run snuffed out by Ederson before he tested the keeper with a long-range strike.
Another long ball over the top presented a chance for Alan Patrick but he blazed well over.
City’s opportunities were limited despite their control of much of the play. Raheem Sterling volleyed wide but was offside anyway, Joao Cancelo curled a shot wide and Nicolas Otamendi headed at Andriy Pyatov before shooting over from 30 yards. Gundogan also had an effort deflected wide.
City finally made the breakthrough after 56 minutes. Gabriel Jesus was unable to get on the end of a through ball but was a alert enough to poke the ball away from Pyatov as he tried to gather. He found Gundogan to his left and the German found the net through a crowded area.
Yet any hopes that would kill off the visitors were wide of the mark as Shakhtar responded well and drew level 13 minutes later.
Dodo got behind the City defence on the right and pulled the ball back for Solomon, who had come off the bench just moments earlier, and he struck with a ferocious finish.
Jesus again did well inside the box as City pushed to reclaim the lead, reaching the byline and pulling the ball back for substitute David Silva to shoot. The Spaniard found the target but, after Pyatov, took off some of the pace, Serhiy Kryvtsov cleared off the line.
Sterling then volleyed wide in the closing minutes but City seemed happy to play out the draw.
Fernandinho was booked for a bad challenge late on, earning a suspension for next month’s dead rubber against Zagreb.