Boston repeatedly had chances, but couldn't push across a run. Miami's pitchers, despite allowing seven hits and walking four, kept working out of jams.
The Marlins combined to strike out nine before the game was delayed at 3:22 p.m. ET, with two outs and one on in the top of the eighth inning.
Miami starter Nathan Eovaldi needed 36 pitches to get out of a bases-loaded jam in the first inning. The hard-throwing right-hander's fastball was clocked between 96-98 mph, but the Red Sox effectively fouled off pitches and worked deep counts.
Alex Hassan doubled with one out, and Ryan Lavarnway was hit by a pitch. After Travis Shaw walked, Eovaldi struck out Brandon Snyder looking.
Boston's Allen Webster, on the other hand, needed 11 pitches to get out of the first inning. And he worked around a two-out single to left by Giancarlo Stanton.
Webster worked three scoreless frames, and he threw 30 pitches, 19 for strikes.
Eovaldi's second inning was a crisp one, retiring the side in order with two strikeouts. But with his pitch count at 49, Miami's projected No. 2 starter was lifted. Initially, the hope was to go three innings, but that was dependent on pitch count.
Like Eovaldi, Brad Hand also encountered some trouble in his two innings. But the lefty was able to keep the Red Sox off the board.
In three of the first four innings, the Red Sox had a runner on third. Twice they had the bases loaded, but were unable to score.
Up next: Henderson Alvarez will make his first Grapefruit League start Friday, and he is expected to throw about two innings against the Cardinals at Roger Dean Stadium. Miami is the visiting team for the 1:05 p.m. ET start. Alvarez missed his first start, and several days of camp, due to an infection on his right shin. Lance Lynn will start for St. Louis. Brian Flynn, Steve Cishek, Adam Conley, Carter Capps and A.J. Ramos also are scheduled to pitch for Miami.