1216년(고종 3) 거란(契丹)의 유종(遺種)은 몽골군과의 싸움에서 패해 새로운 생활 근거지를 찾기 위해 고려를 침략하였다. 고려군은 초기의 부진을 씻고 1217년(고종 4) 7월부터 황려현(黃驪縣, 현 경기도 여주) 전투와 제주(堤州, 현 충청북도 제천)의 박달현 전투(朴達峴戰鬪)에서 대승을 거뒀다. 그리고 명주(溟州, 현 강원도 강릉)에서 혈전(血戰)을 통해 거란군을 여진(女眞) 지역으로 몰아내는 전과(戰果)를 거두기도 하였다. 그러나 여진 지역으로 쫓겨갔던 거란군은 여진의 군사를 얻어 세력을 회복한 뒤, 1217년 10월 장성(長城)을 넘어 다시 공격해 왔다.
그들은 전군병마사(前軍兵馬使)였던 김취려(金就礪)와 예주(豫州, 현 함경남도 정평)의 생천(栍川)에서 교전하고 일단 물러났다. 이때 김취려는 갑자기 위중한 병을 얻어 귀경하지 않을 수 없었다. 고려는 김취려가 없는 상황에서 거란군의 거센 공격을 막지 못하고, 철령(鐵嶺) 이북의 땅 대부분을 내주고 말았다. 1218년(고종 5) 3월과 4월이 되자 거란군은 함경도와 평안도의 분수령을 넘어 청천강과 대동강 사이의 지역까지 육박하였다.
다급해진 고려 조정에서는 조충(趙冲)의 후임으로 좌간의대부(左諫議大夫) 김군수(金君綏)를 서북면(西北面) 병마사(兵馬使)로 삼아 대적하게 하였다. 그러나 몇 차례의 승리만을 거두었을 뿐 거란군의 침략을 근본적으로 막지는 못하였다.
1218년 7월 고려 조정은 군사를 정비한 뒤, 수사공(守司空) 조충을 재기용해 서북면 원수(西北面元帥)로 삼았다. 그리고 병에서 회복한 김취려를 다시 병마사로 등용하였다. 또한 정통보(鄭通寶)를 전군으로, 오수기(吳壽祺)를 좌군으로, 신선주(申宣胄)를 우군으로, 이림(李霖)을 후군으로, 이적유(李迪遺)를 지병마사(知兵馬事)로 삼아 거란군을 토벌하게 하였다.
한편, 여러 도의 안찰사(按察使)에게도 명을 내려 군사를 이끌고 이들을 돕도록 하였다. 그 결과 조충, 김취려 등은 1218년 9월에 출병하여 동주(洞州, 현 황해도 서흥)의 동곡(東谷)에서 거란군을 물리쳤다. 그리고 거란의 모극(謀克) 고연(高延)과 천호(千戶) 아로(阿老) 등을 사로잡고, 성주(成州, 현 평안남도 성천)로 나아갔다.
동주는 국도(國都)인 개경과 가까운 거리였기에 이곳은 군사 전략에서 중요한 지역이었다. 따라서 동주전투의 승리로 고려군은 결정적인 승기를 잡고 거란군을 거세게 몰아붙일 수 있었다. 그 뒤 계속해서 고려군에게 밀린 거란군은 그들에게 최후의 보루였던 강동성(江東城: 현 평안남도 강동)까지 퇴각하기에 이르렀다.