However, just six minutes later, the Rossoneri restored parity when Stefan De Vrij headed a corner from Sandro Tonali into his own net.
The reigning champions then had another chance to go in front with a second penalty as Matteo Darmian was hacked down by Fode Ballo-Toure. Lautaro Martinez, however, saw his spot-kick saved by Ciprian Tatarusanu.
Both sides pushed for a winner in the second-half, with Milan even hitting the post through Alexis Saelemaekers, but couldn’t find a breakthrough.
Milan remain in second place and still unbeaten going into the international break, while Inter are in third, seven points behind.
Here are the player ratings for both sides:
Ciprian Tatarusanu – 8/10
Milan’s best player of the night, Tatarusanu made a series of incredible saves to keep his side in the game, including keeping out Martinez’s penalty which ultimately proved decisive.
Davide Calabria – 6.5/10
A solid display from the Milan left-back, who improved vastly from his midweek showing in the Champions League. However, Calabria was dispossessed a few times and was beaten in the air too.
Simon Kjaer – 7/10
The Milan skipper didn’t put a foot wrong in the game and was an absolute rock at the back, making three clearances and interceptions each.
Fikayo Tomori – 7/10
The former Chelsea man’s pace is a huge asset and he used it to ruffle a few Inter feathers, whilst also forcing De Vrij into scoring the own goal during a set-piece.
Fode Ballo-Toure – 6/10
He looked to be in sixes and sevens in the first half, even conceding the second Inter penalty with a clumsy challenge on Darmian.
Sandro Tonali – 7.5/10
The 21-year-old worked hard all night and even bagged an assist for their goal as it was his free-kick that De Vrij converted into his own net.
Franck Kessie – 6.5/10
Kessie tracked back and closed down spaces often, as always. But the penalty he conceded will surely nag him, considering it was a strange call.
Brahim Diaz – 6/10
Inter did a fabulous job of keeping Diaz quiet, who failed to impact the proceedings in any meaningful way.
Rade Krunic – 6.5/10
His physical style of play helped Milan win the midfield battle as Krunic did a fine job of keeping Brozovic quiet.
Rafael Leao – 6.5/10
The Portuguese only completed nine accurate passes in almost an hour’s action but still managed to get three shots on target, a testament to how dangerous he was. He could’ve used a little more cutting edge.
Zlatan Ibrahimovic – 6.5/10
No derby goals for the Milan legend tonight but he was still an important player in their build-up, whilst also winning a few duels.
Pierre Kalulu – 7/10
He replaced the ineffective Ballo-Toure at half-time and proved to be a massive upgrade, making important blocks and then playing a key role in their late surge.
Ante Rebic – 6.5/10
The Croatian was good on the ball and helped Milan continue their press. However, he’d be frustrated to have missed two good chances late on.
Alexis Saelemaekers – 7/10
Saelemaekers was very lively, although he smashed an effort against the post late on, missing a great chance to win it for the ‘home’ side.
Ismael Bennacer – 6.5/10
The Algerian, too, put up a good display but blazed a good chance well over the bar and saw a late chance he created wasted by Rebic.
Tiemoue Bakayoko – 5/10
He rarely got on the ball despite Milan being in control when he came on.