Paris Saint-Germain secured top spot in Group A after recovering from a two-goal deficit to draw 2-2 at Real Madrid, who also secured their Champions League last-16 qualification.
Karim Benzema, on his 100th Champions League start, put Real in command with goals after 17 and 79 minutes. PSG were denied a penalty and Real goalkeeper Thibaut Courtois escaped a red card after VAR recognised a foul in the build-up.
But Kylian Mbappe (81) and Pablo Sarabia (83) scored to level things up before Real substitute Gareth Bale struck a post in added time.
Galatasaray were denied a first victory in Group A as Club Brugge scored a stoppage-time equaliser and then had two men sent off in a 1-1 draw.
Adem Buyuk broke Galatasaray's goal duck in the competition with a clever turn and volley after 11 minutes. Krepin Diatta equalised two minutes into stoppage time, but both he and Clinton Mata picked up second yellow cards for excessive celebrations and the Belgians had to see the game out with nine men.
Tottenham produced a remarkable comeback in Jose Mourinho's first home game in charge to beat Olympiakos 4-2 and reach the last 16.
Youssef El-Arabi and Ruben Semedo struck inside the opening 19 minutes to put the Greek visitors in control. But Dele Alli replied just before the break and Harry Kane grabbed a second-half double either side of Serge Aurier's powerful strike.
Kane's two goals sent him into the record books as he is now the fastest player to score 20 Champions League goals, only needing 24 games.
Robert Lewandowski scored four goals in the space of 14 second-half minutes as Bayern Munich thrashed Red Star Belgrade 6-0 to win Group B.
Leon Goretzka's first Champions League goal gave Bayern a 14th-minute lead before Lewandowski took over.
The prolific Poland striker, who saw a first-half effort disallowed, scored four times between the 53rd and 67th minutes to take his season's tally for club and country to 31. Corentin Tolisso scored in the 89th minute to complete the rout.
Manchester City qualified for the knockout stages for a seventh consecutive season but were disappointing in a 1-1 draw with Shakhtar Donetsk.
Ilkay Gundogan's 56th-minute strike put City ahead at the Etihad and on the way to top spot in Group C. But Manor Solomon equalised 13 minutes later to keep alive Shakhtar's hopes of joining City in the last 16.
Atalanta claimed their first Champions League win with a 2-0 home victory over Dinamo Zagreb. Luis Muriel (pen, 27) and Alejandro Gomez (47) were on target as Atalanta moved to within a point of Dinamo and two of Shakhtar heading into the final round of games.
Juventus clinched top spot in Group D with a 1-0 win over Atletico Madrid. Paulo Dybala struck the winner at the end of the first half, flashing home a free-kick off the underside of the crossbar from an acute angle
Bayer Leverkusen are only one point behind Atletico after marking their 100th Champions League game with a 2-0 win at Lokomotiv Moscow.
A bizarre 11th-minute own goal - Leverkusen's third of the competition - gifted them the lead. Eder smashed the ball straight at team-mate Rifat Zhemaletdinov and the ricochet flew past goalkeeper Guilherme. Sven Bender added the second with a brilliant volley.
When is the last-16 draw?
The draw for the last 16 of the Champions League takes place on Monday December 16 in Nyon, with proceedings set to start at 11am, UK time.