And, although Millwall had more of the chances in the closing stages, neither team really looked like taking all three points.
Bristol City went in front after 10 minutes with the game's first shot. A corner was worked to Jay Dasilva on the edge of the box, and his low cross fell to Pereira who lashed home.
It was only a second ever goal for the Portuguese defender, who was one of six players brought into the side by Lee Johnson as he looked to arrest a run of form that had seen the Robins lose three games in a row.
Millwall, who came into the contest having failed to score in four of their last six matches, looked up against it at that point but, after falling behind they began to dominate, creating a string of half-chances.
Connor Mahoney missed his kick when Mahlon Romeo's cross fell his way and Tom Bradshaw flicked a header narrowly wide, while Matt Smith forced Niki Maenpaa – another of Johnson's changes, making his first league start of the season – into a save.
One Jed Wallace cross only just evaded Smith's diving head and when the striker did connect with Wallace's next delivery he failed to generate the power required.
Just five minutes into the second half, however, the home side finally turned half-chances into something more clear-cut, a combination of Smith and defender Kalas bundling Mahoney's corner over the line after Maenpaa had failed to gather.
If Millwall had been dominant before the equaliser, they were rampant after, forcing a string of set-pieces and carving out several headed chances – the best of which fell, inevitably, to Smith, but this time Maenpaa was able to save well low down.
Bristol City, on the other hand, had almost completely stopped functioning as an attacking force, sitting deeper and deeper, with Andreas Weimann an increasingly isolated figure.
In fact, having taken the lead so early, the visitors managed just one other shot – a wayward Callum O'Dowda volley in the 20th minute – in the entirety of the match.
A Millwall winner would have taken them above their opponents in the chase for the top six but, though Bradshaw hit the side netting with 20 minutes to go, the late flurry of chances never materialised.
The draw leaves both sides within range of the play-off places, with Bristol City two points off sixth and Millwall three further back.