Bud Norris (3-2) lasted just five innings but surrendered just one run for Houston, which snapped a three-game losing streak. Jose Veras pitched a perfect ninth for his second save of the year.
Matt Dominguez sprayed two hits for the Astros, who won despite striking out a combined 15 times.
Hisashi Iwakuma (2-1) was brilliant in the losing effort, striking out a season-best 11 batters. Iwakuma did yield six hits and three runs -- two earned -- in five innings of work.
Kendry Morales had two hits, including his third home run of the season, while Justin Smoak and Michael Morse each went 2-for-4.
Seattle threatened to get things started in the first inning, but after loading the bases, Norris got Raul Ibanez to ground to Gonzalez to end the threat.
Ibanez then muffed a ball in left field in the bottom of the frame, allowing Jason Castro to come around to score, giving Houston the early 1-0 advantage.
The Mariners tied things up next inning on Endy Chavez's two-out double to right-center field. Dustin Ackley crossed the plate before Chavez got greedy trying to stretch out a triple. He was tagged out between second and third.
Houston added its final two runs in the third inning. Gonzalez led off with a home run to right on a 2-0 count. After allowing singles to Jose Altuve and Fernando Martinez, Iwakuma struck out the next two hitters he faced. Carlos Pena was then intentionally walked to load the bases, but Iwakuma hit Justin Maxwell to force in what would become the decisive run.
Morales went yard in the seventh inning off Travis Blackley to round out the margin.
Castro stole the first base of his career ... Houston hit 0-for-14 with runners in scoring position ... Seattle third basema
04/23 23:57:00 ET