Valtteri Bottas clinched his second win of the season - and his second at Sochi - after his Mercedes team mate Lewis Hamilton was handed two five second penalties for a pre-race infraction on his initial way to the grid.
Red Bull's Max Verstappen was runner-up after successfully staying ahead of the recovering Hamilton to the finish line.
The race saw a dramatic start with separate incidents taking out McLaren's Carlos Sainz and Racing Point's Lance Stroll on the opening lap.
A stewards investigation for the way he'd conducted his practice start on the initial way to the grid notwithstanding, Lewis Hamilton was lined up in pole position on the grid at Sochi Autodrom. But he had other issues on his mind: the fact that he was starting on soft tyres while Max Verstappen and Valtteri Bottas were both on the preferred medium compound for one, and the likelihood that he would end up giving his rivals a tow in the long run down to the opening corners to challenge for the lead.
When the lights went out, Hamilton launched off the grid while Bottas was able to pass Verstappen for second and then use the slipstream to gain on his Mercedes team mate into turn 2. Hamilton was narrowly able to fend off the attack, while on the other side of the track Verstappen ran wide and into the run-off area, slaloming the marker boards to make a legal return to the track.
Carlos Sainz also went off the track, but he cut his return too fine going through the markers and clipped the wall, shattering the McLaren's left front suspension and inadvertently obstructing his team mate Lando Norris as the car spun across the track trailing debris across the racing line. Caught up in a separate incident was Racing Point's Lance Stroll who was hit from behind by Leclerc in the congestion which spun him round into the barrier and out of the race.
A safety car was deployed for the clean-up enabling Norris and a number of other drivers at the back including Alex Albon and George Russell to pit for an early change to the hard compound tyre. Hamilton, Bottas and Verstappen were left leading the Renault pair of Esteban Ocon and Daniel Ricciardo, with Sergio Perez having dropped to sixth ahead of Pierre Gasly and Charles Leclerc. The biggest gainers from the first lap incidents were the two Haas cars of Kevin Magnussen and Romain Grosjean who found themselves running up into the top ten for the restart at the end of lap 5.
Hamilton offered his rivals no chance to slipstream him this time and quickly pulled away. But that success was tempered by confirmation that he had been handed not one but two separate five second penalties for his pre-race infraction, wrecking his chance of equalling Michael Schumacher's all-time wins record this weekend. The issue was exacerbated by his being on the soft tyres, which mandated making an early stop before he could try to pull out a gap over the rest of the field.
Elsewhere, Perez was able to make a pass through turn 2 on Ricciardo on lap 15, the Renault pitting next time by. Also on the move was Daniil Kvyat with the AlphaTauri swiftly dispatching both Haas cars to climb up to eighth place. A good deal of entertainment came from the three friends currently running at the back of the field - Albon, Norris and Russell - until Russell flat-spotted his tyres and was forced to make his second stop of the day and a return to the medium compound at the end of lap 15.
Hamilton's stop came on lap 17. He wasn't happy about the early timing, and it was an interminable wait in the pit box as he served his penalty once his new hard tyres were fitted. It dropped him to 11th place behind Ferrari's Sebastian Vettel, who was swiftly dispatched as Hamilton started to work his way forward. Meanwhile Bottas and Verstappen - still on their initial set of medium tyres - were now leading the race from Perez and Leclerc after Ocon's pit stop dropped him behind the still-to-stop Vettel.
Perez was the last of the front runners to have started on soft tyres to pit on lap 21, and he came back out in sixth place just behind Hamilton who was now hunting down Kvyat, who was also yet to make his first call to pit lane having begun the race on the hard compound.
Wary of Hamilton's recovery, Red Bull called in Verstappen for new tyres on lap 26 and Mercedes responded by pitting Bottas next time by. The Finn's advantage was sufficient to keep him in the lead ahead of Leclerc, while Verstappen briefly dropped to fourth behind Kvyat but the Red Bull was given little resistance by the sister AlphaTauri. Further back, Daniel Ricciardo had been on the move with a pre-agreed pass on his team mate and then a more assertive overtake of Vettel; however he was then given a five second penalty for going off-track and not following the approved instructions for resuming while he was getting around Ocon. Admonished, Ricciardo took the blame and said he would make up for it by going faster.
Leclerc finally made his stop from second place on lap 29 dropping him to seventh, while Kvyat came in on lap 31 and rejoined in eighth. It meant that the top three were the same as they had been at the start, but inverted: Bottas leading Verstappen by 12s and Hamilton a further 9s behind. Perez was back up to fourth ahead of Ricciardo and Leclerc, with Ocon running in seventh from Kvyat, Kimi Raikkonen and Pierre Gasly.
Raikkonen was the final driver to make his first stop of the afternoon on lap 37, promoting Norris back into the top ten after his first lap dramas. With all the scheduled pit stops having played out, it was now a matter of whether anyone would encounter problems lasting the remaining laps without tyre problems forcing their hand.
Gasly sought to take advantage of a brief Virtual Safety Car (after Grosjean mowed down the polystyrene markers at turn 2) to make a stop, dropping him to 11th but with fresh tyres compared to both Norris and Albon ahead that soon allowed him to efficiently regain the two lost positions. Having originally pitted at the end of the first lap, Norris was finally obliged to make another stop with five laps remaining.
There was no sign of any such tyre worries for Valtteri Bottas and Max Verstappen who were trading fastest lap times as they cruised to the finish with the extra point ultimately going to Bottas. Even Hamilton, who had stopped significantly earlier, seemed to have no problems with his pace as he joined them on the podium. Perez claimed fourth while Ricciardo held on to fifth despite his penalty ahead of Leclerc, Ocon, Kvyat, Gasly and Albon.
One lap down at the chequered flag were Alfa Romeo's Antonio Giovinazzi, Haas' Kevin Magnussen and Ferrari's Sebastian Vettel. They were followed by Kimi Raikkonen, Lando Norris and Nicholas Latifi, with Romain Grosjean finishing ahead of George Russell and two DNFs in the form of Carlos Sainz and Lance Stroll.