董晋在唐玄宗后期中明经科,唐肃宗即位后,被任命为秘书省校书郎,供职翰林。之后,还任过汾州司马、淮南节度使崔圆的判官,及主客员外郎等职。
唐代宗大历年间(766—779年),董晋曾随同李涵护送崇徽公主嫁回纥,因不辱使命,回朝后拜司勋郎中,后迁转秘书少监、左金吾将军等职。
唐德宗即位后,董晋先在朝廷太府卿、御史中丞,后外任华州刺史。这时,四镇之乱爆发,前往平乱的泾原镇兵路经长安时发生哗变,德宗逃往奉天(今陕西乾县)。泾原变兵在长安拥立朱泚为主。朱泚派兵攻华州,董晋弃城赴奉天跟从德宗,被封为国子祭酒。不久,董晋出使抚慰恒州,回经河中时,节度使李怀光也起兵反叛朝廷,并与朱泚相呼应。董晋在河中对李怀光晓以君臣大义,劝他不要助朱泚为乱。李怀光听从董晋的劝说,虽不满于朝廷,但终不与朱泚相勾结,这对当时的政局产生了积极的影响。
奉天之难平定后,德宗返回京师,董晋迁任左金吾卫大将军、尚书左丞,当时韩滉执政,威权显赫,韩滉仗势陷害右丞元琇,虽朝臣都认为元琇冤枉,但慑于韩滉权势敢怒而不敢言。董晋挺身为元琇极力辩解,颇为朝臣历称道。
贞元五年(789年)三月,董晋为门下侍郎、同中书门下平章事(即宰相)。因另一宰相窦参正得宠于德宗,大权独揽,董晋但奉职而已。窦参专政,引起了德宗的猜忌。唐德宗向董晋询问窦参的过失,董晋如实作了回答,德宗于是罢免了窦参。董晋心感到惶恐,上疏辞职。
贞元九年(793年),董晋被起用为礼部尚书兼兵部尚书、东都留守、东都畿汝州都防御使。
不久,宣武(今河南开封)节度使李万荣死,德宗授董晋为尚书左仆射、同中书门下平章事,兼宣武节度副大使。本来李万荣临死前已让同乡亲信邓惟恭接任,这样,邓惟恭对董晋的来任非常不满,以至发展到谋图反叛。董晋得知后捕杀其党羽,囚送邓惟恭到京师,德宗对邓惟恭将功折罪流放汀州,但又怕董晋柔弱不能制御宣武的骄兵悍将,调汝州刺史陆长源为其司马管理军务。陆长源执法严刻,多追究镇兵的往日恶行。董晋开始支持他,后来见这样不利于与镇兵的关系,就制止他的作为。董晋又用孟叔度管理财赋,而孟叔度为人轻佻,不尊重镇兵,为镇兵所反感,虽然如此,因董晋谦虚谨填,俭约循旧,使镇兵还大体安定。
贞元十五年(799年)二月三日(3月13日),董晋在宣武军去世,终年七十六岁。德宗为他辍朝三日,追赠太傅,谥号“恭惠”。董晋死后不到十日,宣武即发生兵乱,乱军虐杀陆长源及孟叔度。