Carlos Tevez put the Italian side ahead early on before a defensive mix-up gifted Dortmund an away goal through Marco Reus in the 18th minute.
Alvaro Morata scored against the run of play two minutes before half-time to regain Juve’s lead, but despite having the better of the chances in the second period, the hosts could only take a one-goal lead to Germany.??
Dortmund looked exposed in defence early on, and were behind after 13 minutes from a quick Juventus breakaway.
Morata did well on the left to advance from midfield and catch the Germans unprepared, shooting across goal for Roman Weidenfeller to spill the ball into the feet of Tevez, who made no mistake from four yards.
But Dortmund were themselves gifted an equaliser five minutes later as Giorgio Chiellini slipped 40 yards out to allow Reus a free run on Gianluigi Buffon???s goal, the German making no mistake from just outside the area.
Juventus lost midfielder Andrea Pirlo in the first half to injury, and in-turn lost their flow as Dortmund pressed for a second away goal.
But after Leonardo Bonucci headed over a good chance from six yards, the hosts grabbed the lead going into half-time.
Tevez fed Paul Pogba on the left after 43 minutes, and the Frenchman???s fine centre was tucked away by Morata from six yards, appearing in between two Dortmund defenders.
Juventus controlled the game in the second period but missed two fine opportunities to take a two-goal lead to Dortmund.
First, the tireless Tevez dragged the ball just wide through a crowded penalty area after being found by Claudio Marchisio.
Then, substitute Roberto Pereyra beat Weidenfeller from eight yards at an angle having been put through on goal by Morata with four minutes remaining, but his effort went inches wide of the post.
The last-16 second-leg will be played at the Westfalenstadion on Wednesday, March 18.