永平十七年(公元74年),擔任司馬的耿恭,跟隨騎都尉劉張、奉車都尉竇固、駙馬都尉耿秉等打敗車師,並將車師納入東漢版圖。
隨即東漢朝廷在西域設置了西域都護、戊己校尉,並任命耿恭為戊己校尉,率領數百人屯兵後王部金蒲城(今新疆奇台西北)。到了永平十八年(公元75年),東漢大軍回歸中原之後,不甘心喪失西域的匈奴,立即捲土重來,集結數萬騎兵,欲一舉奪回車師。耿恭從原本就不多的人馬中,挑選出三百人前往援救車師,結果在途中遭遇北匈奴大軍,因寡不敵眾,全軍覆沒。於是,匈奴大軍開始圍攻金蒲城。面對匈奴的圍攻,耿恭便親自登城與北匈奴人交戰。耿恭把毒藥塗在箭上,傳話給北匈奴人說:"這是漢朝神箭,中箭者必出怪事。"於是用硬弓射箭。中箭的北匈奴人,看到傷口處血水沸涌,大為驚慌。當時正好出現狂風暴雨,耿恭軍乘雨攻打北匈奴,殺傷眾多北匈奴人。北匈奴人十分震恐,於是解圍撤退。
此戰耿恭雖然獲勝,但是知道金蒲城的守備條件不是很好。所以,耿恭移師疏勒城,以做長期抗戰的準備。果然沒過多久,匈奴人再次捲土重來殺向疏勒城。讓匈奴人沒想到的是,耿恭沒有坐以待斃,而是招募了幾千人,主動開城迎戰,結果把匈奴騎兵打得四散奔逃。初戰失利的匈奴人,對疏勒城進行圍攻,並將城中的水源斷絕。結果,耿恭率領大家挖井取水,繼續與匈奴作戰。不過隨着時間的推移,城中的糧草逐漸消耗一空。於是,守城的將士便用水煮鎧甲弓弩,吃上面的獸筋皮革。但是無論條件如何艱苦,守城將士還是同仇敵愾,給予匈奴人很大的殺傷。
其實,東漢朝廷之所以能容忍匈奴如此肆無忌憚的攻擊疏勒城,是因為漢明帝在永平十八年八月不幸去世。在朝廷大喪之機,沒有及時派出救兵。之後漢章帝繼位之後,就採納司徒鮑昱的建議,派征西將軍耿秉屯守酒泉,派酒泉太守秦彭(一作段彭)、謁者王蒙、皇甫援徵發張掖、酒泉、敦煌三郡以及鄯善部隊,共七千多人,前往救援。
建初元年(76年)正月,秦彭等人率軍在柳中集結,進擊車師,攻打交河城,斬殺三千八百人,俘虜三千餘人,北匈奴驚慌而逃。不過漢朝大軍,此時已經準備東歸。只有一位軍吏范羌堅持要求去援救耿恭,於是撥給他兩千人馬繼續前往疏勒城。范羌率二千名漢軍日夜兼程,克服了種種惡劣的環境,終於翻過白雪覆蓋的山脈。此時的疏勒城仍然在漢軍手中,只是數百人的守軍,只剩下二十六人。
次日,耿恭與他地二十五名士兵隨同救兵一道踏上的返鄉之程。可是戰鬥還沒有結束,北匈奴派兵追擊,漢軍邊戰邊走。從疏勒城出發時,還有二十六人,沿途不斷死亡,到三月抵達玉門時,已經只剩下了十三人。