Che Adams spectacular effort on 16 minutes would be the game’s only goal.
Yet other than a shade more luck and better finishing, there wasn’t much more City could have done against a side who played as though their Premier League status depended on it.
It was a frustrating 90 minutes for a dominant City, driven throughout by the excellent David Silva who did everything he could to inspire his team.
What happened?
With six changes to the team that started against Liverpool, there was little fluency in City’s play in what was a lively start from both sides.
Southampton, clearly pumped up and determined to have a real go, harried and pressed and with just 16 minutes gone, they were rewarded with the opening goal.
Oleksandr Zinchenko was caught in possession by Armstrong just inside the City half and Che Adams immediately hit a 50-yard shot that sailed over the stranded Ederson to give the hosts the lead.
City fought back, but were faced with a home side crowding their own box and throwing bodies on the line as though their lives depended on it.
Yet how City didn’t score during one spell of first-half dominance.
First Raheem Sterling saw an angled shot beaten away by Alex McCarthy, then Fernandinho hit a low shot against the foot of the post before David Silva headed straight at the keeper from six yards out.
City started the second-half in determined fashion with keeper McCarthy just about keeping Gabriel Jesus out from four yards during a period of relentless pressure.
But the longer the home side clung and chances went begging, so that feeling of ‘it might be one of those days’ grew stronger.
Particularly as a lovely sweeping cross-field move ended with a smart Zinchenko pass finding Silva who span off his marker only to see his low shot saved by McCarthy’s legs.
Surely such pressure had to pay off eventually?
Pep Guardiola decided to play a couple of his trump cards on the hour as he introduced Kevin De Bruyne and Phil Foden into the action, but still Saints fought like tigers to defend their lead.
For all the neat build-ups, crosses and one-twos, it felt that it would take something unusual to level the scores - a deflection or mistake by the Saints defenders.
The attack v defence (bar the odd Saints counter) continued until the final whistle with City unable to convert any of the 26 shots or 13 corners into a goal.
Line-ups:
City XI: Ederson, Cancelo, Zinchenko, Garcia, Laporte, Fernandinho, D Silva (c), Bernardo, Mahrez (De Bruyne 59), G Jesus, Sterling (Foden 59)
Subs: Bravo, Stones Gundogan, Rodrigo, Otamendi, Doyle, Harwood-Bellis
Southampton: McCarthy, Walker-Peters, Stephens, Bednarek, Bertrand, Armstrong (Smallbone 90+7), Ward-Prowse, Romeu, Redmond, Ings, Adams (Long 70)
Subs: Djenepo, Obafemi, Gunn, Vokins, Danso, Ferry, Jankewitz
What it means…
City stays second, still needing five points to guarantee Champions League football and seven from securing runners-up spot.
What’s next?
City host Newcastle United at the Etihad on Wednesday evening, kick-off 6pm.
Then it’s off to the Am Ex to face Brighton on Saturday evening (8pm).