Bayer Leverkusen could not find a winner against Barcelona as a 1-1 draw saw the German side fail to qualify.
Leverkusen, who had not won in Europe since matchday one, could have made it through if they bettered Roma’s result against BATE Borisov.
Barcelona, who were already through as group winners, went ahead on 20 minutes through Lionel Messi, only for the in-form Javier Hernandez (23) to equalise.
Roma secured their place in the knockout stages after a 0-0 Group E draw with BATE Borisov — the night’s only game without a goal.
Olivier Giroud scored a hat-trick as Arsenal won 3-0 at Olympiacos to make the last 16 of the Champions League for the 16th season in succession.
Going into the game having lost three of their previous five fixtures, the Gunners needed to win by two goals or more at the Karaiskakis Stadium or better the 3-2 defeat they suffered at home to the Greek champions in September.
With seven key first-team players missing through injury, Arsene Wenger recalled Theo Walcott after his recovery from a calf problem, but it was Giroud who would produce the goods when it mattered as Arsenal made light work of a seemingly difficult task to seal a 3-0 win.
For Giroud it would have been all the more sweet given he had been sent off in the 2-1 defeat at Dinamo Zagreb which started a run of poor results that led to Wednesday night’s scenario.
Arsenal become just the eighth side to advance through their group having taken three points or fewer from their opening four matches and Wenger will now be hoping to avoid the big names as they will come up against a group winner in the next round.
Bayern Munich cruised to a 2-0 victory at Dinamo Zagreb, with lethal striker Robert Lewandowski scoring both goals.
The result means Bayern top Group F by six points while Dinamo finish third.
Chelsea made it three English teams into the knockout stages after beating Porto 2-0at Stamford Bridge courtesy of an Ivan Marcano own goal and second from Willian (52) which saw the Blues as Group G winners.
Dynamo Kiev will join them in the last 16 after beating Maccabi Tel Aviv 1-0 at home with a 16th-minute goal from Denys Garmash.
While, Porto head into the Europa League.
Belgium were celebrating a first club through to the knockout stages of the Champions League in 15 years after Gent beat Group H winners Zenit Saint Petersburg 2-1 at at Ghelamco Arena.
Laurent Depoitre (18) headed the hosts into a first-half lead, only for Artem Dzyuba to equalise as the Russian team chased a sixth straight European victory.
Danijel Milicevic (78) knocked in a late winner.
Bottom placed Lyon defeated Valencia 2-0.
New Valencia boss Gary Neville will now regroup his squad for the Europa League.
Lyon, who had picked up just one point from their previous five Group H matches, went ahead just before half-time through Gnarly Cornet (37), with Alexandre Lacazette (76) wrapping things up late on.
Bayer Leverkusen 1 – 1 Barcelona
Roma 0 – 0 BATE Borisov
Dinamo Zagreb 0 – 2 Bayern Munich
Olympiacos 0 – 3 Arsenal
Chelsea 2 – 0 FC Porto
Dynamo Kyiv 1-0 Maccabi Tel Aviv
Gent 2 – 1 Zenit St. Petersburg
Valencia 0 – 2 Lyon