The defending Bundesliga champions narrowed the gap to first place with a gritty victory at the Allianz Arena
In a heated contest, Mario Gotze's solitary goal on 65 minutes made the difference as the title holders narrowed their gap to first place to just two points.
Space to work with was very scarce for the teams' illustrious attacks, but in a rare moment of defensive breakdown, Gotze pounced on Shinji Kagawa's deflected ball, slotting into the lower left corner as his marker, Jerome Boateng, was left dumbfounded.
The first half was played like a chess match, with the two sides cancelling one another out. Bayern had an edge in the possession, with Toni Kroos in particular standing out as his team's primary distributor from defensive midfield.
However, the hosts were rarely able to venture into the final third, and were quickly closed down by the immensely industrious BVB. The only real chances they managed to carve out were Kroos' volley, which sailed narrowly wide on 17 minutes, and a sitter that the unmarked Franck Ribery poorly missed over the bar.
Dortmund looked to break with pace but was largely foiled before creating any chances. Robert Lewandowski played one cross that left goalkeeper Manuel Neuer stranded, but Rafinha managed to nod clear at the back post, and the two sides had to be content to enter the halftime break on level terms.
The balanced slipped slightly into Dortmund's favour in the second half as play remained very tight, but the visitors managed to carve out more opportunities on goal. Robert Lewandowski missed a free header over the bar on 51 minutes, and later flicked on a clever ball to Kagawa, who was denied by a stunning save from Manuel Neuer. Gotze was first to the loose ball, but volleyed wide from the edge of the penalty box with the goal open.
Bayern was initially stunned by the opener, but fought bravely back into the game. With a quarter hour left, Luiz Gustavo had a blistering shot from distance parried, and shortly thereafter, Franck Ribery was in on goal on the counterattack, but had his attempt saved by Roman Weidenfeller.
Holger Badstuber had a free kick curl over the bar with eight minutes to go, but the best chance for Bayern came on 88 minutes as the unmarked substitute Nils Petersen struck a low drive wide of the left post.
The result sees Bayern's lead in the Bundesliga slip to just two points, as wins for Dortmund and Monchengladbach bring the second- and third-placed teams to 26 points apiece.