董宣,字少平,陈留郡圉地(今河南杞县南)人。起初为司徒侯霸征召,官至北海相。他上任时,郡中武官公孙丹建造豪宅,而风水先生说这是凶宅,入住后家里一定要死人。公孙丹就纵使儿子杀了一个过路人,移尸新宅,作替死鬼。董宣得知后,就把公孙丹父子收捕斩杀。公孙氏是个大家族,其族亲纠集30余名丁壮,拿着兵器到府衙闹事,为公孙丹父子鸣冤叫屈。董宣以公孙丹从前曾依附过篡位的王莽的罪名,认为公孙亲党有串通海贼的嫌疑,于是把这30余人一网打尽,下在死囚牢中,指使门下书佐水丘岑尽数杀戮。青州知府弹奏董宣滥杀无辜,把董宣和水丘岑一并拿下,移交廷尉处理,判了死刑。不料董宣在狱中日夜吟诗唱歌,一点也不忧愁。到了行刑的那天早上,官府送来酒食辞生祭奠,董宣拒不吃喝,厉声道:我董宣一生从未吃过人家的东西,况且今日就要死了!言罢从容登上囚车赴刑。当时同一批斩首的有9人,董宣排在第二号。手起刀未落之际,汉光武帝派来的特使快马驰至,特赦董宣缓刑,押回大牢。特使审问董宣,为何滥杀无辜。董宣把公孙氏一案的前因后果,来龙去脉一一具告,并言明水丘岑是受他的指令杀人的,不应判罪。希望朝廷明察,杀他而保全水丘岑,特使向光武帝如实禀奏,光武帝下旨贬董宣为怀县县令,并让青州府不再追究水丘岑罪责。后来水丘岑官至司隶校尉。
江夏一带有夏喜为首的贼寇犯境作乱。朝廷派董宣为江夏太守。董宣到境,发文书说:朝廷派太守擒拿贼寇,所以我担任了这个职务。现在统兵到边界,文书已到,希望你们考虑怎样安身吧。夏喜等一帮贼寇,对董宣早有所闻,十分害怕,纷纷散伙,缴械降顺。当时外戚阴氏(刘秀发妻阴丽华的亲戚)作江夏郡都尉。董宣不仅不巴结攀附皇亲国戚,反而时时轻慢他,所以不久即被罢官。
后来特地征召董宣为洛阳令。当时湖阳公主家的奴仆白天杀人,因藏匿在公主家里,官吏不能抓捕到。等到公主出行,用这个家奴当随从,董宣就在夏门亭等候他们。于是就拦住车马,用刀在地上画着,大声数落公主的过失,呵斥那个家奴下车,就杀了那个家奴。公主立即回宫向皇帝告状。皇帝很生气,召来董宣,要用鞭子打死他。董宣磕头说:请让我说一句话再死。皇帝说:想说什么?董宣说:陛下圣德,使国家中兴,却放纵家奴杀良民,将如何治理天下呢?我不需用鞭子打,请让我自杀。就用头撞击房柱,血流满面。皇帝命令宦官挟持着董宣,让他磕头向公主谢罪,董宣不听从。宦官强使董宣磕头,董宣两手撑地,始终不肯低头。