Den brasilianska 25-yard vänster-fot skott svängde in från undersidan av baren för att skicka botten klubb Darmstadt till en sjunde raka nederlag.
Bayern arbetade för en stor del av spelet mot spiriterade motståndare.
Peter Niemeyer borde ha utjämnat, på väg rakt mot Manuel Neuer, som hade parerat Jerome Gondorfs frikick.
Carlo Ancelottis sida återfick första plats från Leipzig, som hade flyttat tre punkter klart genom att slå Hertha Berlin 2-0 på lördag.
Leipzig har ersättat Borussia Dortmund som Bayerns största Bundesliga titel rivaler denna säsong, och onsdagens möte mellan de två sidorna i München är mycket väntat.
Det fanns en känsla av att Ancelotti och hans spelare kan ha haft ett öga på den fixturen, eftersom de var långt ifrån som bäst mot Darmstadt.
Bayern kapten Philipp Lahm, som var listad på laglistan, drabbades av ett problem under uppvärmningen och riskerades inte - kanske med onsdagen i åtanke - som Rafinha var inkallad för att ersätta honom.
Det var lite fluens om Bayerns pjäs, och Robert Lewandowski - som undertecknade ett kontrakt förlängning som varar fram till 2021 på tisdagen - såg inte ut som att fortsätta loppet som hade gett honom fem mål i sina tidigare tre matcher.
Det närmaste den polske anfallaren kom till ett mål var en frikick flöt strax över baren mot slutet av första halvlek, på en dag då Bayern sällan hotade annat än från set-pieces.
Det fanns en viss uppmuntran i nederlaget för Darmstadt, som har kämpat för att återhämta sig från coach Dirk Schusters avgång för Augsburg under sommaren.
Norbert Meier, Schusters ersättare, sparkades den 5 december, men interimstränaren Ramon Berndroth tog en energisk prestation från sina spelare, och de skulle ha fått en värdefull poäng men för Costas ostoppbara skott.
Matchändar, SV Darmstadt 98 0, FC Bayern München 1.
Andra halvlek, SV Darmstadt 98 0, FC Bayern München 1.
Joshua Kimmich (FC Bayern München) vinner en frispark i defensiva halvan.
Foul av Victor Obinna (SV Darmstadt 98).
Javi Martínez (FC Bayern München) vinner en frispark i defensiva halvan.
Foul av Victor Obinna (SV Darmstadt 98).
Ersättning, FC Bayern München. Renato Sanches ersätter Douglas Costa.
Ersättning, SV Darmstadt 98. Victor Obinna ersätter Sven Schipplock.
Foul av Franck Ribery (FC Bayern München).
Florian Jungwirth (SV Darmstadt 98) vinner en frispark i defensiva halvan.
Försök missade. Antonio-Mirko Colak (SV Darmstadt 98) huvud från mitten av lådan missar till vänster. Hjälpt av Marcel Heller med ett kors.
Handboll av Franck Ribery (FC Bayern München).
Franck Ribéry (FC Bayern München) vinner en frispark i defensiva halvan.
Farligt spel av Sandro Sirigu (SV Darmstadt 98).
Ersättning, FC Bayern München. Joshua Kimmich ersätter Thomas Müller.
Ersättning, SV Darmstadt 98. Antonio-Mirko Colak ersätter Peter Niemeyer.
Rafinha (FC Bayern München) vinner en frispark i defensiva halvan.
Foul av Marcel Heller (SV Darmstadt 98).
Försöket räddades. Peter Niemeyer (SV Darmstadt 98) header från mitten av rutan sparas i nedre högra hörnet.
Försöket räddades. Jérôme Gondorf (SV Darmstadt 98) höger fotade skott från utsidan av lådan sparas i nedre högra hörnet.
Xabi Alonso (FC Bayern München) visas det gula kortet för en dålig foul.
Mats Hummels (FC Bayern München) visas det gula kortet för en dålig foul.
Foul av Mats Hummels (FC Bayern München).
Mario Vrancic (SV Darmstadt 98) vinner en frispark i anfallshalvan.
Javi Martínez (FC Bayern München) vinner en frispark i defensiva halvan.
Foul av Sven Schipplock (SV Darmstadt 98).
Försök missade. Thomas Müller (FC Bayern München) huvud från mitten av lådan missar till höger. Hjälpt av David Alaba med ett kors.
Mål!  SV Darmstadt 98 0, FC Bayern München 1. Douglas Costa (FC Bayern München) vänster fotade skott från utsidan av lådan till övre vänstra hörnet. Hjälpt av Thiago Alcántara efter en viss situation.
Rafinha (FC Bayern München) vinner en frispark i anfallshalvan.
Foul av Fabian Holland (SV Darmstadt 98).
Ersättning, FC Bayern München. Franck Ribéry ersätter Arturo Vidal.
Försening över. De är redo att fortsätta.
Försening i matchen Jérôme Gondorf (SV Darmstadt 98) på grund av en skada.
Försök blockerat. Douglas Costa (FC Bayern München) höger fotade skott utanför lådan är blockerad. Hjälpt av Thiago Alcántara.
Mats Hummels (FC Bayern München) vinner en frispark i defensiven.
Foul av Sven Schipplock (SV Darmstadt 98).
Foul av Arturo Vidal (FC Bayern München).
Fabian Holland (SV Darmstadt 98) vinner en frispark i den defensiva halvan.
Ersättning, SV Darmstadt 98. Florian Jungwirth ersätter Jan Rosenthal.
Försök blockerat. Robert Lewandowski (FC Bayern München) huvudet från mitten av lådan är blockerad. Hjälpt av Douglas Costa med ett kors.
Douglas Costas spektakulära vinnare tog Bayern München toppen av Bundesliga på målskillnad innan onsdagens möte med titel rivaler RB Leipzig.