Pierre-Emerick Aubameyang prodded in on 11 minutes at a frenzied Signal Iduna Park to propel Dortmund up to third on 21 points, three points behind Bayern, for whom this was a first defeat of the league season.
RB Leipzig are top, unbeaten and three points clear of the mighty Bayern, after a thrilling 3-2 win at Bayer Leverkusen on Friday signalled another milestone in their fast, but controversial rise to the top of German football.
Aubameyang scored the only goal of the game -- he should have gone on to grab at least two more -- poking in the ball from close range after ex-Bayern man Mario Goetze's cross.
The striker celebrated with three push-ups and the home side were on the attack again moments later, the Bayern rearguard creaking as the fans at the intimidating 81,000 arena ratcheted up the volume once more.
Dortmund coach Thomas Tuchel said it had been a bruising encounter.
"We have suffered a lot," he said. "But when you get into the ring with Bayern, you should not expect to step out again without black eyes."
Philipp Lahm, the Bayern captain, admitted that neutrals would be delighted to see someone other than the Bavarians at the top.
"It's good for the Bundesliga, it's what the whole world wanted," he added bitterly.
The game simmered from the start and threatened to boil over as the first half wore on, with Dortmund conceding a series of free-kicks and referee Tobias Stieler struggling to keep a lid on it.
Stieler had a word with Tuchel after he protested one challenge and Marc Bartra was booked for a bad one on Bayern's Thomas Mueller.
Soon after Bartra was penalised again for tugging down Robert Lewandowski and was fortunate that Stieler decided to keep his cards in his pocket.
The momentum was now with Carlo Ancelotti's men and Bayern piled on the pressure, Thiago Alcantara just failing to properly connect with a flying scissor kick five minutes before half-time.
Aubameyang should have put the home side 2-0 up soon after the restart, but he headed feebly over, and then Goetze got away with only a yellow card for a nasty challenge on Franck Ribery that left the Frenchman in agony on the turf.
The visitors were a whisker from equalising around the hour mark when Xabi Alonso let fly from distance, the ball crashing off the crossbar.
On 71 minutes Aubameyang should have sealed the game for Dortmund, but he shot straight at Manuel Neuer after a Bayern lapse at the back.
Ribery was in the thick of it again in the dying minutes and was booked when the two sides clashed once more, the referee's assistants running onto the pitch to help restore order.
Polish predator Lewandowski should have levelled the score at the death but he inexplicably headed wide when clear and unmarked.
Bundesliga newcomers RB Leipzig, who were only founded in 2009 when the Austrian drinks giants Red Bull took over a German Football League licence, stretched their unbeaten run to a record 11 games as defender Willi Orban delivered the winning goal nine minutes from time at Bayer Leverkusen.
Kevin Kampl fired Leverkusen into an early lead at the BayArena but Julian Baumgartlinger's own goal drew Leipzig level almost immediately.
Germany international Julian Brandt made it 2-1 to the hosts just before half-time, but the turning point came when Leipzig goalkeeper Peter Gulacsi saved a 54th-minute penalty from Hakan Calhanoglu.
Emil Forsberg equalised for Leipzig following an impressive solo run on 67 minutes before Orban's late winner sent the Bundesliga upstarts three points clear of Bayern Munich.
Cologne sit fourth, level on points with Dortmund, after Anthony Modeste struck his league-leading 12th goal in a 2-1 away win at Borussia Moenchengladbach.