Rovers took an early lead when John Marquis was sent clear and rounded goalkeeper David Forde to score and Andy Williams took advantage of some poor defending to double their lead after 34 minutes.
Carl Baker pulled one back for Pompey before the break, lashing into the roof of the net, but they could not find an equaliser.
It was the perfect ending to a tough week, which saw Rovers lose at Luton Town and draw at home with Carlisle United.
“It is a good result after a tough week for us, but important to end with three points,” said Rovers boss Darren Ferguson.
“Sometimes we need to remember we are quite a good team ourselves.
“It is about winning games and we have beat a good side who will be up there at the end of the season.
“To come here and get a win is a vital win. We have now played Pompey and Luton away and I still have loads of players injured. The players deserve enormous credit.
“Winning sends a message to my players.
“People won’t be overly surprised we won, but they wouldn’t have been surprised if Portsmouth had won.”
Plymouth are five points clear at the top of League Two following an emphatic 4-1 win against Yeovil.
Portsmouth: Forde, Evans, Clarke, Burgess, Stevens, Baker, Doyle, Rose (Linganzi 54), Naismith (Lalkovic 54), Roberts, Chaplin (Main 71). Unused substitutes: Davies, Smith, O’Brien, Bennett.
Doncaster Rovers: Marosi, Richardson (Calder 29), Wright, Butler, Evina, Blair, Houghton, Rowe, Coppinger (Middleton 75), Marquis, Williams, Calder (Mason 68). Unused substitutes: Etheridge, Baudry, Mandeville, Beestin.
Referee: D Deadman (Cambridgeshire).
Man of the match: Andy Williams.