劉封本是羅侯寇氏之子、長沙郡劉姓人家的外甥。劉備到了荊州投靠刺史劉表後,安居於荊州。劉備為站穩腳跟,又未有子嗣的他,於是收劉封為養子。
建安十六年(211年),劉璋邀請劉備入蜀來抵禦張魯,後來劉備於劉璋決裂,於是諸葛亮也接連入蜀。劉封雖然年紀尚小,但已武力過人,即使是劉禪出生之後,劉封因為深得劉備喜愛與器重。在正史中,劉備也是有兒子的,不過大多夭折,劉禪雖然出生,但是劉備也依然擔心劉禪會早夭。後來劉封率軍也諸葛亮、張飛、趙雲等一同西上進攻益州,佔據益州,益州被平定只後,劉備任命劉封為副軍中郎將。
建安二十三年(218年),劉封跟隨劉備北攻漢中,建安二十四年(219年),劉備徹底攻克漢中,宜都太守孟達受命攻佔房陵郡後又攻克了上庸郡。劉備擔心孟達不能取勝,於是派遣劉封南下去統領孟達的軍隊,劉封在佔領上庸之後,被封為副軍將軍。劉禪逐漸成長,劉備也掌控漢中後,劉封的境遇也開始有了微妙的變化。
劉備在奪得漢中後不久,將劉封調離了政治權力的中心,就在此時,劉禪被劉備立為王太子,這也就意味著劉封與太子之位無緣。
劉封佔據了上庸之後,為何後來不去救關羽呢?事情的真相是什麼?
實際上關羽並未向關羽求救,正在圍攻襄陽、樊城的關羽要劉封出兵幫助,劉封推辭說「山郡初附,未可動搖?」這個理由是成立的。而關羽死後,建安二十五年(220年),與劉封不和2的孟達投降了曹魏,還勸劉封投降,但劉封拒絕了,最後申耽也投降了,劉封只能無奈敗退成都。
《三國誌》上記載這「先主責封之侵陵達,又不救羽。」由此可見不救關羽並不會讓劉封至死,最後讓劉備下定決心殺掉他的理由是諸葛亮給出的。諸葛亮擔心劉封本性剛猛強烈,劉備死後受不了牽制,最後勸劉備借此機會除掉他。於是劉備在諸葛亮的建議下賜死劉封,劉封自裁,劉備深表痛惜。