Dhoni's unbeaten 42-ball 55, including four fours and three sixes, revived India's fortunes after Sri Lankan bowlers had initially pushed the visitors on to the backfoot with early wickets.
Reeling at 51 for four at one stage, Dhoni, in the able company of Rohit Sharma (37), put up a 78-run stand for the sixth wicket to take India to a decent total.
Opting to bat, India not only lost Gautam Gamhir, who retired hurt in the very first over, Virender Sehwag and Suresh Raina also failed to lay a strong foundation.
It was Nuwan Kulasekara who provided the Lankans the early breakthroughs by sending back both Sehwag (12) and Raina (13) cheaply in the fifth over.
Virat Kohli and Yuvraj Singh were expected to steady the boat but Angelo Mathews spoilt the Indians' plan by dismissing the former for eight.
Yuvraj, who made an emotional return to international cricket scoring a 26-ball 34 against New Zealand in a T20 match, also could not put up any resistance as Rangana Herath struck in the very next over to leave India struggling at 51 for four in 8.3 overs.
More From This Section
Yuvraj fell for a 12-ball 11, that included two fours.
However, Dhoni and Rohit managed to consolidate the team's position and take the score past 100.
In the last over, Rohit fell for a 26-ball 37 with four hits to the fence and a six.