Старик Сантьяго живёт в маленьком рыбачьем посёлке на Кубе и рыбачит совсем один. Последний раз он провёл в море 84 дня, но не поймал ничего. Раньше с ним рыбачил мальчик Манолин, который очень помогал старику, но родители мальчика решили, что Сантьяго — невезучий, и велели сыну ходить в море на другой лодке.
Старик научил Манолина рыбачить, и мальчик любит Сантьяго, хочет ему помочь. Он покупает ему сардины для наживки, приносит еду в его хижину. Старик уже давно смирился со своей нищетой.
Они беседуют с мальчиком о рыбалке и знаменитых бейсболистах. По ночам старику снится Африка его юности, и «львы, выходящие на берег».
На следующий день рано утром старик отправляется на рыбалку. Мальчик помогает ему снести парус, подготовить лодку. Старик говорит, что на этот раз он «верит в удачу».
Одна за другой рыбацкие лодки отчаливают от берега и уходят в море. Старик любит море, он думает о нём с нежностью, как о женщине. Насадив на крючки приманку, Сантьяго медленно плывёт по течению, мысленно общаясь с птицами и рыбами. Привыкший к одиночеству, старик вслух разговаривает сам с собой.
Старик знает разных обитателей океана и очень нежно к ним относится.
Сначала Сантьяго ловит небольшого тунца. Он надеется, что рядом со стаей тунцов ходит большая рыба, которой понравятся его сардины. Вскоре старик замечает лёгкую дрожь гибкого зелёного прута, который заменяет ему удочку. Леска уходит вниз, и старик ощущает огромную тяжесть клюнувшей рыбы.
Старик пытается подтянуть толстую леску, но у него ничего не получается — большая и сильная рыба тянет лёгкую лодку за собой. Старик жалеет, что с ним нет мальчика — он мог бы снять наживки с других прутов, пока Сантьяго сражается с рыбой.
Проходит около четырёх часов. Близится вечер. Руки старика изрезаны, он закидывает леску на спину и подкладывает под неё мешок. Теперь Сантьяго может прислониться к борту лодки и немного отдохнуть.
Ночь. Рыба тянет лодку всё дальше от берега. Старик устал, но мысль о рыбе ни на секунду не покидает его. Иногда ему становится её жалко — рыба, такая большая, сильная и старая, должна умереть, чтобы он смог жить дальше. Сантьяго разговаривает с рыбой: «Я с тобой не расстанусь, пока не умру».
Силы старика на исходе, а рыба и не собирается уставать. На рассвете Сантьяго съедает тунца — другой еды у него нет. Левую руку старика сводит судорогой. Старик надеется, что рыба всплывёт, и тогда он сможет убить её гарпуном. Наконец леса идёт вверх, и на поверхности показывается рыба. Она горит на солнце, голова и спина у неё тёмно-фиолетовые, а вместо носа — меч, длинный, как бейсбольная бита. Она на два фута длиннее лодки.
Появившись на поверхности, рыба вновь уходит в глубину, тянет за собой лодку, и старик собирает силы, чтобы удержать её. Не веруя в Бога, он читает «Отче наш».
Проходит ещё день. Чтобы отвлечься, старик вспоминает о бейсбольных играх. Вспоминает, как когда-то в таверне Касабланки мерился силой с могучим негром, самым сильным человеком в порту, как целые сутки просидели они за столом, не опуская рук, и как он, в конце концов, взял верх. Он ещё не раз участвовал в подобных поединках, побеждал, но потом бросил это дело, решив, что правая рука ему нужна для рыбной ловли.
Битва с рыбой продолжается. Сантьяго держит лесу правой рукой, зная, что, когда силы иссякнут, её сменит левая, судорога в которой давно прошла. На маленькую удочку попадается макрель. Старик подкрепляет ею свои силы, хотя эта рыба совсем невкусна. Ему жаль большую рыбу, которой нечего есть, но решимость её убить от этого не уменьшается.
Ночью рыба выходит на поверхность и начинает ходить кругами, то приближается к лодке, то отходит от неё. Это признак того, что рыба устала. Старик готовит гарпун, чтобы добить рыбу. Но она отходит в сторону. От усталости мысли путаются в голове у старика, а перед глазами пляшут чёрные пятна. Сантьяго собирает остатки сил и вонзает гарпун рыбе в бок.
Преодолевая тошноту и слабость, старик привязывает рыбу к борту лодки и поворачивает в сторону берега. Направление ветра указывает ему, в какую сторону плыть, чтобы добраться до дома.
Проходит час, прежде чем показывается первая акула, приплывшая на запах крови. Она приближается к корме и начинает рвать рыбу зубами. Старик бьёт её гарпуном в самое уязвимое место на черепе. Она погружается на дно, утащив с собой гарпун, часть верёвки и огромный кусок рыбы
Ещё двух акул Сантьяго убивает ножом, привязанным к веслу. Эти акулы уносят с собой не меньше четверти рыбы. На четвёртой акуле нож ломается, и старик достаёт крепкую дубинку.
Он знал, что каждый толчок акулы об лодку означал кусок оторванного мяса и что рыба теперь оставляет в море след, широкий, как шоссейная дорога, и доступный всем акулам на свете.
Следующая группа акул нападает на лодку перед закатом. Старик отгоняет их ударами дубинки по головам, но ночью они возвращаются. Сантьяго сражается с хищницами сначала дубинкой, потом — острым осколком румпеля. Наконец акулы уплывают: им нечего больше есть.
Старик входит в бухту у своей хижины глубокой ночью. Сняв мачту и связав парус, он бредёт к дому, ощущая неимоверную усталость. На мгновение старик оборачивается и видит за кормой своей лодки огромный хвост рыбы и отблеск белого хребта.
В хижину старика приходит мальчик. Сантьяго спит. Мальчик плачет, увидев его израненные ладони. Он приносит старику кофе, успокаивает его и уверяет, что отныне они будут рыбачить вместе, ибо ему надо ещё многому научиться. Он верит, что принесёт старику удачу.
Утром рыбаки с изумлением рассматривают останки гигантской рыбы. На берег приходят богатые туристы. Они удивлены, заметив длинный белый позвоночник с огромным хвостом. Официант пытается рассказать им, что произошло, но те ничего не понимают — они слишком далеки от этой жизни.
А старик в это время спит, и ему снятся львы.