Dans le nord de la Britannia, en 62 après JC, une tribu de cavaliers celtes est brutalement anéantie par les Romains dirigés par Corvus (Kiefer Sutherland). Le seul survivant, un garçon nommé Milo, dont la mère Corvus a personnellement tué, est capturé par des marchands d’esclaves.
Dix-sept ans plus tard, à Londinium en 79 après J.-C., le propriétaire d’esclaves Graecus (Joe Pingue) regarde une classe de gladiateurs se battre, sans être impressionné jusqu’à ce qu’il voie Milo (Kit Harington), un gladiateur talentueux que les foules appellent « le Celte ». Milo est bientôt amené à Pompéi avec ses compagnons esclaves. Sur la route, ils voient un cheval tomber alors qu’ils dessinent une calèche transportant Cassia (Emily Browning), de retour après un an à Rome, et sa servante Ariadne (Jessica Lucas). Milo tue le cheval pour mettre fin à ses souffrances, et Cassia est attirée par lui. Cassia est la fille du gouverneur de la ville Severus (Jared Harris) et de sa femme Aurelia (Carrie-Anne Moss). Sévère espère que le nouvel empereur Titus investira dans des projets de reconstruction de Pompéi, malgré l’avertissement de Cassia de voir Rome devenir plus corrompue. Felix (Dalmar Abuzeid), un serviteur, emmène Vires, le cheval de Cassia, pour une balade, avant d’être englouti lorsqu’un tremblement de terre du Vésuve ouvre le sol sous lui.
À Pompéi, Milo développe une rivalité avec Atticus (Adewale Akinnuoye-Agbaje), un gladiateur champion qui, selon la loi romaine, recevra sa liberté après avoir remporté une victoire de plus. Les gladiateurs sont exhibés lors d’une fête où Corvus, maintenant sénateur, dit à Sévère que l’empereur n’investira pas dans ses plans, mais lui-même le fera. Il est révélé que Cassia a quitté Rome pour échapper aux avances de Corvus. Lorsqu’un tremblement de terre provoque l’anxiété de certains chevaux, Milo aide à les calmer. Il emmène ensuite Cassia en balade et lui dit qu’ils ne peuvent pas être ensemble. De retour à la villa, Corvus est prêt à tuer Milo (ne le reconnaissant pas du massacre du village), mais Cassia plaide pour la vie de Milo. Milo est fouetté pour ses actions, et Atticus admet le respect pour son rival alors qu’ils se préparent à s’affronter au prochain festival.
Dans l’Amphithéâtre de Pompéi, pour punir Milo, Corvus ordonne de le tuer lors de la première bataille, et le méchant dresseur Bellator (Currie Graham) convainc Graecus de sacrifier également Atticus. Les deux hommes et d’autres gladiateurs sont enchaînés à des rochers alors que d’autres gladiateurs sortent en soldats romains pour recréer la victoire de Corvus sur les Celtes. Travaillant ensemble, Milo et Atticus survivent à la bataille; Atticus se rend compte que les Romains n’honoreront jamais sa liberté. Pendant la bataille, Corvus force Cassia à accepter de l’épouser en menaçant de faire tuer sa famille pour trahison supposée contre l’Empereur. Lorsque Milo et Atticus gagnent, Cassia défie Corvus en tenant un « pouce levé” pour qu’ils vivent, et Corvus la fait emmener à la villa pour être enfermée. Affirmant qu’un tremblement de terre est un signe de Vulcain, Corvus demande à son officier Proculus (Sasha Roiz) de combattre Milo en tête-à-tête. Leur bataille est interrompue lorsque le mont Vésuve entre en éruption, créant des tremblements massifs qui provoquent l’effondrement de l’arène, envoyant Milo et Proculus s’écraser dans les donjons. Milo ouvre les portes pour permettre à ses camarades gladiateurs d’attaquer; Proculus s’échappe, tandis que les gladiateurs tuent Bellator. Voyant Corvus tomber sous une poutre effondrée, Severus tente de le tuer, mais Corvus le poignarde et s’échappe.
L’éruption envoie des débris enflammés pleuvoir sur la ville alors que la population tente de fuir vers le port. Une boule de feu détruit et coule un navire, tuant les Graecus qui s’échappent. Avant de mourir, Aurelia dit à Milo que Cassia est à la villa. Milo court vers la villa et parvient à sauver Cassia, mais Ariane est tuée lorsque la villa s’effondre dans la mer Méditerranée. Atticus tente d’atteindre le port, mais un tsunami créé par le volcan s’abat sur la ville, détruisant le port et les murs extérieurs, et brisant plusieurs navires. En retrouvant Atticus, Milo suggère de chercher des chevaux dans l’arène pour s’échapper. Alors que les gladiateurs font face à des soldats romains dans l’arène, Cassia est enlevée par Corvus après avoir trouvé les corps de ses parents. Atticus demande à Milo de poursuivre le char portant les deux pendant qu’il combat Proculus. Atticus est mortellement blessé dans le duel, mais parvient néanmoins à tuer Proculus.
Milo poursuit Corvus à travers la ville; les deux évitent à peine les boules de feu et les infrastructures qui s’effondrent. Cassia parvient à se libérer avant que le char ne s’écrase dans le temple d’Apollon. Milo et Corvus se battent alors qu’une boule de feu détruit le temple. Cassia enchaîne Corvus à un bâtiment, alors que Milo déclare qui il est, que Corvus a tué sa famille et maintenant ses dieux viennent punir le sénateur. Milo et Cassia partent alors qu’une vague pyroclastique s’engouffre dans la ville, incinérant Corvus. Dans l’arène, Atticus proclame fièrement qu’il meurt en homme libre avant d’être consumé par le flux pyroclastique. À la périphérie de la ville, le cheval jette Milo et Cassia. Milo dit à Cassia de le quitter, réalisant que le cheval n’est pas assez rapide pour les porter tous les deux. Au lieu de cela, elle envoie le cheval au large, ne voulant pas passer ses derniers moments à courir, et sachant qu’ils ne peuvent pas dépasser la montée subite. Milo embrasse Cassia alors que la vague les engloutit. Le dernier plan est celui des corps pétrifiés du duo, enfermés dans une étreinte éternelle.