The police officer's union said the off-duty officer was working as a security guard when he asked three rowdy customers to leave a restaurant in the 3100-block of West 26th Street.
When he went to the parking lot to make sure they had left, the men tried to run him over with their car.
The officer got pinned against a fence and fired shots at them. One man was grazed in the head.
The suspects took off and were involved in an accident at 31st and Kedzie. That's where they were arrested.
The officer is expected to be okay.