Dragons produced a strong second half fightback but the wait for derby day success over rivals Cardiff Rugby continued as the hosts secured a 31-14 BKT United Rugby Championship victory at Cardiff Arms Park.
First half tries from Josh Adams, Rhys Carre and James Botham put the hosts in the driving seat - with Angus O’Brien getting one try back.
Hooker Bradley Roberts grabbed a second half score and the visitors pushed for more as they were held at bay by a resolute home defence.
And Cardiff wrapped up maximum points five minutes from time when Thomas Young finished off a long-range effort.
Dragons made eight changes from the side that lost to Benetton with captain Will Rowlands returning alongside the likes of Ross Moriarty, Basham and Sio Tomkinson.
Roberts gobbled up a loose ball on the floor early on as Dragons looked to run in the opening minutes and test the home defence.
A penalty for holding on gave Cardiff the first shot at goal, but Jarrod Evans saw his kick drift wide left in blustery and wet conditions.
Two quickfire penalties gave Cardiff strong field position and when they earned another - and with it a free play - it was spun wide to Wales wing Adams to step inside and score.
Penalties were killing any momentum Dragons could build as another saw Rhys Priestland kick to the corner and a set piece move was punched over by Carre.
Dragons needed a response and neat work from O’Brien to keep the ball alive saw them run from deep and force a penalty and entry in the home 22.
A driving lineout surged forward and forced another penalty before Jack Dixon was held up as he burrowed for the line by the posts.
Sustained pressure finally told as full back O’Brien found a gap in the defensive wall to cut the lead in half, with Hanrahan adding the extras.
The game was swinging from end to end with Rhodri Williams harshly yellow carded for what appeared a good tap tackle after a lengthy TMO intervention.
Cardiff made the numerical advantage count immediately with replacement James Botham blasting over out wide.
Dragons were forced to dig deep in the ten minutes before the break with Aki Seiuli winning a key penalty as he scrambled across to halt Halaholo.
The visitors were dealt another blow on the stroke of half-time as Taine Basham was left in pain after rolling out of tackles and replaced by Keddie.
One last attack before the interval saw O’Brien nudge to the corner, but the dart down the line from Roberts was repelled.
Steff Hughes replaced Tomkinson at the break and early signs of a promise saw Roberts hit another impressive line before Hanrahan pinned the hosts back with a clever kick to the corner.
Pressure was building as Aki Seiuli and Jared Rosser both made darting runs before patient play from the forwards was rewarded with Roberts the man to touch down.
Hughes was making a big impression in the second period as he repeatedly took the ball flat to bring people into the game before drilling a low kick in behind to again force Cardiff back on their heels.
A searing break from Aled Summerhill was halted by Ross Moriarty while Harahan had to race back after Jason Harries volleyed the ball through as Cardiff came again.
And a penalty from Evans gave Cardiff breathing space with less than ten minutes to go before a length of the field score from the resulting kick-off from back row Young wrapped up the bonus point.
Timeline:
13m Adams t Evans c 7-0
16m Carre t Evans c 14-0
24m O’Brien t Hanrahan c 14-7
30m Botham t Evans c 21-7
50m Roberts t Hanrahan c 21-14
72m Evans p 24-14
73m Young t Evans c 31-14
Cardiff Rugby: Rhys Priestland; Jason Harries, Max Llewellyn, Uilisi Halaholo, Josh Adams; Jarrod Evans, Tomos Williams; Rhys Carré, Kristian Dacey, Dmitri Arhip, Josh Turnbull, Seb Davies, Shane Lewis-Hughes, Thomas Young, Taulupe Faletau
Replacements: Kirby Myhill, Corey Domachowski, Dillon Lewis, Matthew Screech, James Botham, Lloyd Williams, Mason Grady, Aled Summerhill
Dragons RFC: Angus O’Brien, Rio Dyer, Sio Tomkinson (Hughes 40), Jack Dixon, Jared Rosser (J. Williams 70), JJ Hanrahan, Rhodri Williams (Bertranou 63), Aki Seiuli (Jones 56), Bradley Roberts (Dee 56), Lloyd Fairbrother (Coleman 56), Ben Carter, Will Rowlands, Sean Lonsdale (Wainwright 53), Taine Basham (Keddie 39), Ross Moriarty
Replacements: Elliot Dee, Rhodri Jones, Chris Coleman, Aaron Wainwright, Harrison Keddie, Gonzalo Bertranou, Steff Hughes, Jordan Williams
Referee: Craig Evans (WRU, 36th league game)
Attendance: 8,161