The result temporarily lifted Des Hasler's side into the top four and was an important bounce back in the wake of their 36-0 trouncing by North Queensland last week.
The Dragons held their own for the opening 20 minutes, but when Josh Reynolds and Sam Kasiano scored within four minutes of each other, things looked ominous for McGregor's under-fire side.
The Dragons went close to scoring on five occasions in the first half but the Bulldogs took a 13-0 lead into halftime when Josh Reynolds snapped a field goal as the siren sounded in the background.
Joel Thompson went close to scoring but was brought down inches from the line after being tripped by Reynolds.
The Canterbury five-eighth was not put on report but is facing the scrutiny of the match review committee and a big suspension, after twice being suspended for the same offence in the last two years.
Just when the Bulldogs looked like they were going to run away with it, Gareth Widdop grubbered for Kurt Mann before Benji Marshall laid on a similar try for Euan Aitken to make it 13-10 in the 61st.
However the Bulldogs hung on to keep themselves in the hunt for a top four finish. Dragons second-rower Tyson Frizell has a nervous wait after appearing to touch referee Chris James in the first half.
Bulldogs front-rower Greg Eastwood, also recently returned from a six-week layoff for a knee injury left the field in the first stanza with a hamstring injury and did not return.