Dovizioso was joined on the podium by his Ducati team-mate Jorge Lorenzo, while French rookie rider Johann Zarco continued to impress in his first season by finishing in third.
If Marquez were to finish on the podium, he would have secured his fourth MotoGP title - but this task would be a difficult one for the Repsol Honda rider, as he qualified in 7th to start the race.
However, Marquez got off to a dream start - getting the holeshot off the line and shooting into the lead at the first turn, rising six places in the first ten secords of the race.
But the Championship leader overshot it on the exit of the first turn and ran wide, allowing Zarco to slip through and take the lead, with Lorenzo also passing the Honda and rising into second.
After taking the lead, Zarco shot away from the field and on the opening lap he was over one second ahead of Lorenzo trailing behind - while Marquez was preoccupied in a battle for third with Dovizioso.
On Lap 4, the Ducati team had a minor scare when Dovizioso ran wide and almost took out Marquez in the process - but the grunt of the Ducati was too much for the Honda and the Italian surged in front and into a podium position.
As the laps ticked on, Zarco's lead began to dwindle - as the duo of Ducati's chipped away at the Yamaha rider at the front of the pack and after 8 laps, they were both within one second of the leader.
Lap 9 was when Lorenzo finally made his move on the Frenchman and jumped into the lead - and it only took Dovizioso a few turns to fly past Zarco and into second.
At the halfway mark of the race, the Ducati's were leading the rest of the field by over two seconds - and within three laps, that gap was over four seconds, leaving many wondering whether Ducati would order Lorenzo to move aside for his teammate.
But the speculation could be quickly shut down, as the pair traded fast laps - with Lorenzo going quickest on Lap 11, followed by a hot lap from Dovi on Lap 12, then both riders clocking the quickest time on Lap 13.
It looked like we would have a Ducati showdown to close the race - but a mistake from Lorenzo with four laps remaining allowed Dovizioso to surge into the lead, as the Spaniard nearly slipped from his bike in the process.
From that point forward, it was smooth sailing for Dovizioso - who eventually crossed the chequered flag 0.9s ahead of his teammate, while Zarco was 8.9s behind Lorenzo to lock up his second podium finish of his career.
Marquez finished comfortably in fourth - crossing the line 8.0s behind Zarco, but 11.4s clear of his Repsol Honda team-mate Dani Pedrosa who finished in fifth.
Danilo Petrucci (Octo Pramac) finished in sixth, narrowly edging out Valentino Rossi (Movistar Yamaha) by 0.4s, while Aussie rider Jack Miller (Marc VDS Honda) was next to finish in eighth.
The top ten was rounded out by Maverick Vinales (Movistar Yamaha) and Pol Espargaro (Red Bull KTM)