司马道子专权时期,为了增强中央的防卫力量,阻止荆州和京口北府兵的进攻,遂令其子司马元显强征浙东地区免奴为客的丁壮入伍,企图组建一支新军,名曰“乐属”,于是“东土骚然”,孙恩乘机聚众起义。孙恩原为东晋新安太守孙泰之侄,孙泰被司马道子诱杀后,孙恩逃入海岛。晋安帝隆安三年(399年),孙恩乘“东土骚然”之机,率众登陆,相继攻占了上虞、会稽等地。东晋当即派刘牢之和谢琰率北府兵镇压。元兴元年(402年)三月,孙恩兵败后赴海而死。余众推卢循为首领,继续战斗。桓玄建楚后,曾将卢循任为永嘉(今福建福州)太守。桓玄被击杀后,卢循乘机北攻东阳(今浙江金华),被刘裕击退,只得南下番禺。义熙六年(410年),刘裕北伐南燕,卢循又再次北上,进攻建康。刘裕灭燕后,当即回救建康。卢循兵败投水而死,起义失败。
王恭和殷仲堪看到司马道子专横暴虐,心怀不满,遂相互联合,于晋安帝隆安元年(397年)分别从京口和武昌向建康进攻,司马道子被迫杀王国宝兄弟,请求退兵。不久,王、殷二人又联合广州剌史桓玄等,再次进攻建康。后因北府兵将领刘牢之受司马道子诱降倒戈,王恭被杀,各路军遂仓惶退却。
进攻建康的诸路军退至浔阳(今江西九江)后,共推桓温之子桓玄为盟主,桓玄遂乘机火并了殷仲堪,控制了荆州,兵马日盛。元兴元年(402年),司马道子发兵进攻荆州,桓玄又收买了北府兵将领刘牢之,遂长驱直入,攻占建康,道子被杀。不久,桓玄逼晋安帝退位,自己称帝,建国号楚。
桓玄建楚后,为了巩固帝位,迫刘牢之自刎而死,又起用了一批中下级年轻将领,企图将北府兵变成自己的私人武装。北府兵将领刘裕虽表面迎合,暗中却进行倒桓准备。元兴元年(402年),刘裕在京口起兵,率北府兵攻入建康,击杀桓玄,扶晋安帝继位,遂控制了东晋大权。义熙六年(410年),刘裕北伐,灭南燕;次年,击败了卢循起义;十三年,灭后秦,年底,刘裕称宋王。晋恭帝元熙二年(420年),代晋称帝,东晋亡。