Thomas Pinault thumped a 30-yard winner eight minutes from time to give Colchester a surprise win.
The midfielder deceived City keeper Steve Phillips with a low drive that bounced awkwardly, but should have been saved.
Colchester were good value for the points against a City side whose promotion challenge has been hit by failure to win a league game since the New Year.
The visitors took a 12th minute lead when Scott McGleish rose above a flat-footed defence to head home Joe Keith's free kick.
The U's had already grazed the crossbar with a tenth minute header from Mickey Stockwell, while City found it hard to create anything in a drab first half.
Danny Wilson's team began the second half more brightly and loan-signing Craig Fagan lobbed just wide from a Brian Tinnion pass.
After 51 minutes Fagan scored the first goal of his spell at Ashton Gate. Scott Murray's run and pass set up the chance for the young striker to fire in off a post from 12 yards.
Even that didn't inspire City and a frustrated Wilson sent on strikers Lee Peacock and Christian Roberts form the bench in a bid to pep a lacklustre display.
Still Colchester defended solidly and it was no surprise when Pinault came up with a winning goal that ensured City would be booed off by their own supporters.
The visitors had lost the experienced Stockwell through injury early in the second half, but always looked well organised and strong in the tackle.
City badly missed suspended defenders Tony Butler and Danny Coles and Wilson opted to play a back- three with rookie Clayton Fortune in the centre and his side never looked comfortable.