The 41-year-old Spaniard hoped to challenge for a rare victory for Aston Martin, but was thwarted by the defending double world champion Max Verstappen's pace in his Red Bull and his own tyre-choice error when heavy rain arrived.
He recovered to finish a convincing second – his fifth podium finish in six races – and become the oldest top-three finisher since Australian Jack Brabham, who was 44 when he finished second in 1970.
"That was difficult," said Alonso after a race that ran for an hour and 48 minutes, requiring great concentration in difficult conditions on an unforgiving circuit.
"We opted to start on the hard tyre and hoped to play a bit of the long game, in strategy, but Max drove so well, super-well, on those medium tyres to extend his first stint that we didn't have a chance.
"And then, in the end, the rain came and made it complicated.
"Our forecast said it was only going to be light rain so I felt it was best to stay on the slick tyres and not go to the intermediates. It was not easy to drive out there. I could not use full power around the lap, braking was extremely fragile and it wasn't easy.
"I was surprised that there were no safety cars and no incidents so I think everyone did an amazing job."
After his first stop for slick mediums, Alonso came in again after only one lap to go on to intermediate tyres, but his hopes of catching Verstappen were dashed.
He held on to second place of Esteban Ocon of Alpine, his former team, to clinch his best result in Formula One since the 2014 Hungarian Grand Prix.
His Aston Martin team-mate Lance Stroll retired with brake problems after 53 laps. "One to forget," the Canadian said of his race.