公元前 634 年,鲁国因和莒、卫两国结盟,几次遭到齐国的进攻,便向楚国请求援助。而宋国因在泓水之战中被楚国击败,周襄公受伤而死,不甘心对楚国屈服,看到晋文公即位后晋国实力日增,也就转而投靠晋国。楚国为了保持其中原的优势地位,便出兵攻打齐国、宋国,并借以制止晋国的向南扩展。晋国也正好利用这一机会,以援救宋国为名出兵中原。这样,晋楚两国的军事交锋便不可避免地发生了。
公元前 633 年冬,楚成王率领楚、郑、陈、蔡等多国军队进攻宋国,围困宋国都城商丘,宋国的司马公孙固到晋国告急求援。于是晋文公和群臣商量是否出兵及如何救助宋国。大夫先轸力劝晋文公出兵救宋,他认为,救宋既能够“取威定霸”,又报答了以前晋文公流亡到宋国时,宋国国君赠送车马的恩惠。但是宋国不靠近晋国,劳师远征救宋,必须经过楚国的盟国曹国、卫国;而且楚军实力强大,正面交锋也恐怕难以取胜。晋国的狐偃针对这一情况,建议晋文公先攻曹、卫两国,那时楚国必定移兵相救,那样便可解除宋国之围。晋文公采纳了这一建议。尽管如此,晋国感到真正的敌人是楚国,要对付如此强大的敌人,必须进行较充分的准备。晋国按照大国的标准扩充了军队,任命了一批比较优秀的贵族官吏出任军队的将领。