The Dockers trailed at every break and were behind by 20 points before kicking the last nine goals of the match to run out 34-point winners.
In front of 13,284 fans at Etihad Stadium - the third smallest crowd at the venue for an AFL match - the Dockers won 18.9 (117) to 12.11 (83).
It was Fremantle's eighth win of the season and keeps the Dockers in touch with the top eight.
The early signs looked promising for the Demons, who enjoyed their best opening quarter of the season and kicked three goals before Fremantle settled.
- Related links