The Citizens, previously without defeat in 227 days since going down 2-1 to Arsenal in last season’s FA Cup semi-finals, were two behind inside 32 minutes in Kharkiv and unable to truly recover until Sergio Aguero converted from the penalty spot in added time.
With top spot in Group F already guaranteed, the defeat for a City side showing seven changes from their last outing is not too damaging, though momentum has now seemingly been lost four days before their big trip to rivals Manchester United.
Despite knowing that a point would be enough to seal progression to the last 16, regardless of how Napoli performed against Feyenoord, Shakhtar were unwilling to sit back and were rewarded with a couple of first-half goals to seal their progression to the last 16.
City were given a warning when Marlos tested Ederson with a fairly tame attempt, which they failed to take as Bernard curled home a sublime opener five minutes later.
The Brazilian used a decoy run down his left to buy an extra second, before guiding the ball out of Ederson’s reach from just inside the box.
Ederson was equal to Bernard’s next shot, which was this time hit low and hard, but the second goal of the evening arrived just over half an hour in through Ismaily.
A pass over the top was not dealt with by Ederson, who raced well off his line and gave Ismaily the chance to simply knock the ball around him and roll it into an empty net.
Full debutant Ben Foden failed to adjust for his shot 12 yards out and Gabriel Jesus got the ball stuck under his feet when played through, as the Citizens’ response to falling two down fell flat.
Shakhtar were instead looking to more likely to add a third before the break, with Facundo Ferreyra forcing Ederson into another stop and Fred smashing the ball into Eliaquim Mangala from close range.
City have showed plenty of fighting spirit in recent weeks, scoring late winners in their last four outings, and they nearly pulled one back early in the second half after Leroy Sane got on the end of the cut-back, only for Andrij Pyatov to keep it out.
Taison recovered from an early injury scare in the match to play a pivotal role for his side, coming close with a couple of clean strikes, though momentum was with the visitors for the majority of the second half.
Stand-in skipper Fernandinho glanced wide from a good opening and Jesus flicked substitute Brahim Diaz’s cross on to the post, with the Citizens desperately seeking a route back into the game.
Yaroslav Rakitsky could have compounded the visitors’ misery with his free kick, which went up and over the wall but into the hands of Ederson, and there was then a chance for Aguero to reduce to deficit slightly.
The substitute striker added to his impressive away record in this competition by converting from the penalty spot, after Bohdan Butko brought down Jesus, but City could not find a second in the remaining 60 seconds as their impressive run came to an end.