Richard Fierro, 45, told the New York Times he was with family and friends at Club Q on Saturday night when the suspect burst in and began spraying the club with automatic gunfire.
Mr Fierro told the Times his military training kicked in and he ran towards the gunman — later identified by police as 22-year-old Anderson Aldrich — grabbed him from behind by his body armour and pulled him to the ground.
“I just knew I had to take him down,” Mr Fierro told the Times.
After both men fell to the floor, Mr Fierro told the Times that he grabbed the gunman’s handgun and started repeatedly hitting him over the head with it.
As the army veteran shouted at others for help, he said that a patron moved the gunman’s rifle out of reach and a drag dancer began stomping on the suspect with her high heels.
Mr Fierro’s extraordinary act of heroism was corroborated by the nightclub owner, who had seen video footage from inside the club and local officials.
At a press conference on Monday, Colorado Springs Mayor John Suthers said he had met with Mr Fierro.
“I have never encountered a person who had engaged in such heroic actions that were so humble about it. He simply said to me: ‘I was trying to protect my family’.”
Mr Fierro had been at the club with his wife Jess Fierro, friends, daughter Kassy and her longterm boyfriend Raymond Green, who was one of five victims fatally shot in the attack.
The Fierro’s run the Atrevida Beer Company in Colorado Springs and in a post on the company’s Facebook page, Jess Fierro wrote that Green, 22, had been dating their daughter since high school.
“No one should ever have to witness bloodshed like this,” Ms Fierro wrote.
“We are devastated and torn. We love our LGBTQ community and stand with them. This cowardly and despicable act of hate has no room in our lives or business.”
Ms Hierro said Kassy suffered a broken knee while trying to escape the gunman, their two friends were shot, and she and Mr Fierro sustained minor injuries in the melee.
“It was absolute havoc,” she wrote.
After police arrived, Mr Fierro, a veteran of four tours in Iraq and Afghanistan, told the Times that he was placed in the back of a patrol car for an hour as he pleaded to be let out to check on his family.
He initially thought he might have killed the gunman, who remains in hospital and has been arrested on suspicion of five counts of first-degree murder and hate crimes.
Police revised the number of injured down from 25 to 18 on Monday.