在海路,张亮已越过渤海并攻下卑沙(今辽宁大连)。为了震慑高句丽,张亮派先遣船队到鸭绿江入海口,但并没有按唐太宗最先要求进一步向平壤进发。很快,李世绩和李道宗将隋炀帝曾久攻不下的辽东(今辽宁辽阳)包围,并在唐太宗到来时拿下了辽东,白岩城城主孙代音请降。随后李世民开始向安市城(今辽宁鞍山)进军。高丽北部耨萨高延寿、高惠真帅高句丽、靺鞨兵十五万救安市,唐军在驻骅山大破之,高延寿、高惠真帅其众三万六千八百人请降。此战中薛仁贵穿上异于众人的白色衣甲,手持方天画戟英勇作战,自此得到太宗赏识,成为唐朝大将。安市城之战在攻安市城前,唐太宗就得知安市城地势难攻,安市城主杨万春(中国及朝鲜史书中均失安市城城主的名字,朝鲜民间传说此人名叫杨万春。)机智勇敢有一支强大的守城部队。渊盖苏文摄政高句丽后,杨万春拒绝接受渊苏盖文摄政。渊苏盖文曾发兵攻打安市城,但没有成功,因此只好让杨万春继续担任其职务。
唐太宗打算先攻打较为容易的建安城(今辽宁营口)。这样拿下安市城南边的建安城,安市城也就不攻而破。李世绩对此表示反对。他认为如果唐太宗先攻建安城,安市城就会切断唐从辽东的供给线使唐陷入被动。于是唐太宗决定还是先围攻安市城。当唐太宗和李世绩的部队到达安市城后,安市城的守城者见到唐太宗的旗帜就在城墙上大声漫骂,李世民大怒。李世绩于是请求唐太宗拿下安市城后坑杀全城百姓。这使得安市城的守卫者更加奋力抵抗唐军。就这样李世绩一时间拿不下安市城。
一天,唐太宗从安市城中传出杀鸡宰猪的声音。于是告诉李世绩说高句丽人可能在宴请守城部队准备突袭。李世绩于是作好了高句丽会在晚上突袭的准备。事不出所料,安市城当晚真的对唐进行了突袭。不过早有防备的李世民,亲自率兵击退了高句丽的进攻。与此同时,李道宗开始在安市城的东南构筑一个用于进攻安市城的土山。为此,安市城也不断加高东南边的城墙。双方这样对峙了60天后,李道宗的土山已经高到可以看到安市城的里面。李道宗和他的手下傅伏爱登上了土山顶。忽然,土山出现了倒塌,并倒在了安市城的城墙上。安市城的城墙也因此倒塌。傅伏爱这时却擅离职守。高句丽趁乱发动进攻占领了土山,并使其成为安市城防守的武器。唐太宗一怒之下,公开处死了傅伏爱并下令对土山进行疯狂攻击。不过打了三天也没拿下来。李道宗于是赤脚向李世民请罪。不过李世民宽恕了他。
随着冬天的临近,唐的供给也开始匮乏。645年九月十八癸未日(10月13日),唐太宗下令撤退。
李世民在从辽东撤退的时候,强迫辽东的居民迁往唐的地域内。据《资治通鉴》和《三国史记》记载,大约有7万高句丽人被迫从辽东迁入唐。李世民在过辽河的时候,遇到了泥沼。动用了1万人填平泥沼后,唐的大部队才通过辽河。
一些士兵因此在寒冬等待时被冻死。唐太宗很后悔发动了这场战争,说要是魏征还活着,魏征一定会劝阻他不要发动这场战争。十二月,在定州到并州(今山西太原)的路上,李世民病痈,在并州修养了几个月后才回到长安。回到长安后,唐太宗将一般政事交由了太子李治处理。朝鲜18世纪以后的诗文、笔记小说称唐太宗眼部受到了箭伤。受伤说法于史无据。
唐太宗撤退后,渊盖苏文更加不把唐放在眼里,并时常偷袭唐的边境。唐太宗多次要他停止对新罗的攻击,但渊盖苏文对此毫不理睬。646年,宝藏王献给唐太宗两个美女,表示善意,唐太宗没有接受。唐太宗以弓服赐给渊盖苏文,渊盖苏文接受,但不遣使者答谢,于是当年冬,唐太宗下诏削弃高句丽的朝贡,不再承认高句丽的政治地位,考虑灭亡高句丽。
647年,唐的大臣指出虽然645年对高句丽的进攻不成功,但战争使高句丽进入饥荒。因此建议唐太宗小规模攻打高句丽使高句丽农民无法耕作加剧高句丽的饥荒。于是唐太宗令牛进达和李海岸从海上攻打辽东半岛南部,李世绩和孙贰朗从陆路穿过辽河袭击高句丽。据说这两支部队的袭击使高句丽蒙受损失。