周庄王十四年(公元前684)初,齐国军队进攻鲁国。鲁人曹刿往见鲁庄公,询问其作战的理由。鲁庄公以平时用度与臣下分享及祭祀时不滥设祭品为理由,均未被曹刿接纳。鲁庄公随后称自己在司法方面尽量做到合情、公平,曹刿便认为鲁“可以一战”,并获鲁庄公批准随行督战。
同年齐军仗着兵强马壮,侵入鲁境。鲁庄公暂时避开齐军锋芒,撤退到有利于反攻的地方——长勺(今莱芜苗山镇)。由于干时战争的胜利,鲍叔牙以下将士都轻视鲁军,认为不堪一击,于是发起声势汹涌的攻击。鲁庄公见齐军攻击鲁军阵地,就要擂鼓下达应战的命令。曹刿劝阻说:齐兵势锐,我军出击正合敌人心愿,胜利没有把握,“宜静以待”,不能出击。
庄公遂令鲁军固守阵地,只令弓弩手射击,以稳住阵势。齐军没有厮杀到对手,又冲不进鲁军阵地,反而受到鲁军弓弩猛射而无法前进,只得向后撤退。经过稍事休整,鲍叔牙又下令展开第二次攻击,曹刿劝庄公仍然不要出击,继续固守阵地。齐军攻势虽猛,但仍攻不进阵内,士气不免疲惫,再退回到原阵地。
齐军两次进攻,鲁军都没有应战,鲍叔牙和齐军将领都认为鲁军怯于应战,决定再次发动进攻。于是齐军声势浩大的第三次进攻,迅即出现于鲁军面前。曹刿看到这次齐军来势虽猛,但势头没有上两次大,认为出击时机已到,立即向庄公提出反击齐军的建议。庄公亲自擂起战鼓,发出攻击命令,随后鲁军获得了决定性的胜利。
鲁军战胜,庄公传令追击。曹刿认为齐乃大国,兵力素强,不容易判定是否真正失败,很可能另有埋伏,阻止庄公下达追击令。他登轼而望,见齐军旗鼓杂乱,兵器倒曳,又下车观察到齐军战车的车辙十分混乱,判定齐军是真正溃败,才向庄公提出大胆追击的建议。
庄公令下,鲁军猛打猛追,给齐军以沉重打击,俘获大量甲兵和辎重,把齐军赶出国境,并射杀齐桓公子公子雍,洗涤干时之战所蒙受的耻辱,国势为之一振。
周庄王十四年(公元前684)六月,齐国联合宋国再次进攻鲁国。鲁庄公与宋国战于乘丘,取得大胜。齐国军队随后撤退
次年 五月,宋国伐鲁以报乘丘之败,但鲁国再次战胜。
齐国于前681年与鲁国在柯举行和会。终鲁庄公之世齐鲁关系相对和睦,齐仅于前675年联合宋、陈两国进攻鲁国西部。