周昌与刘邦同生于今江苏省徐州市的沛县。在秦朝末期,他和他的堂兄周苛在泗水郡当了一个小官。之后刘邦于沛县造反,迅速占领了泗水郡,周昌从此跟随刘邦,被任命为“职志”,即掌旗之人。秦二世三年,刘邦首次攻入关中成为“汉王”,而周昌则也被任命为中尉。
楚汉之战,周昌的堂兄周苛拼死保护刘邦,但他不肯投降最后被项羽烹杀。刘邦出于对周苛的感谢,封周昌为御史大夫,后来经常和他一起出征。汉6年,周昌得到了与其他大臣如萧何和曹参一样的嘉奖,并被册封为汾阴侯。周昌是个正直的人,有什么说什么。一天,周昌到皇宫向皇上奏事,正好刘邦和戚夫人在一起,周昌一看情况不对,就准备离开,刘邦赶紧跟上说:“我何如主也?”周昌抬头对着他说“陛下即桀纣之主也。”拿刘邦与桀,纣之流相提并论,若换作别人,恐怕早就被斩首了,但是刘邦却是哈哈大笑,对周昌起了敬畏之心。而在刘邦越来越喜欢戚夫人之后,更是想要将吕后的大儿子刘盈给废了,转而将刘如意给封为“储君”。吕后向张良求援,想要帮助刘盈登上皇位,而之前被刘邦排斥在外的“商山四皓”,则是想要帮助刘盈,以此来表明太子的地位。而周昌则带领文武百官,在朝廷中强烈抗议,反对更换储君。周昌因为结巴,无法流利地把自己的想法说清楚,但他还是生气地说:“臣口不能言,然臣期期知其不可。陛下虽欲废太子,臣期期不奉诏。”见到周昌这般坚定,再联系之前商山四皓,刘邦也就暂时打消了废掉太子的念头。吕后在朝堂上偷听,看到周昌对刘盈的袒护,她特意去找了周昌,对他行了跪谢之礼。刘邦知道吕后是个什么样的人,所以他很怕吕后在自己去世后,会对刘如意动手。在赵尧的举荐下,把吕后及满宫大臣都敬畏的周昌叫来,要他做赵国丞相,并辅佐和保护年仅十岁的刘如意。赵尧在推荐中立下了汗马功劳,很快就接替了周昌成为新一任的御史大夫。
刘邦于公元前195年去世,吕后即刻掌权,随即下旨召刘如意入朝。周昌知道吕后这是要报仇,所以一再以刘如意病重为由,不能入京。吕后闻言大怒,把周昌召到京城,怒气冲冲的质问:“尔不稳中有降我之怨威氏乎?而不遣赵王,何?”随后吕后把失去了周昌保护的刘如意带回长安。
后来,吕后把戚夫人做成了人彘,又给刘如意下了毒,刘盈因惊惧而毙命。周昌因为没有照顾好刘如意,没有完成刘邦的遗命,心中充满了悔恨,以生病为由拒绝上朝,然后一天比一天消瘦,三年之后他去世了。
周昌去世后,他的封号在传到孙子周意时就被取消了,汉景帝册封了周昌的孙子周左车为安阳侯,但没过多久,他的封号就因为周左车的罪行而再次被取消了。总而言之,周昌以刚正不阿的品行赢得了所有人的尊敬,却没有阻止吕后报仇雪恨,最后因为没有完成刘邦的遗愿,一蹶不振地死了。班固在《十八侯铭》中对周昌的评价是非常贴切的,那就是:“肃肃御史,以武以文。相赵距吕,志安君身。徵诣行所,如意不全。天秩邑土,勋乃永存。