Malinda Pushpakumara took three wickets and Lakshan Sandakan two, leaving India on 329-6 at the close, with Wriddhiman Saha on 13 and Hardik Pandya on one.
Pushpakumara struck again to get Ajinkya Rahane out and ended day with 3 wickets, while Sandakan got the crucial wicket of Kohli (42).
Kuldeep Yadav (26) batted resolutely though and put on 62 runs with Pandya for the 8th wicket.
Score: India 219/2 from 47.1 overs.
Pushpakumara broke the big partnership of the two India openers, with Rahul chipping a ball to Dimuth Karunaratne, who took a nice catch on the jump at mid-on. His 135-ball knock had eight fours.
Dhawan survived Vishwa Fernando's delivery that wasn't held at the slip region while Rahul was given a life when he tried to step out and slam a ball over long on but could only sky-high it for the fielder to misjudge it.
Sri Lankan captain Dinesh Chandimal brilliantly caught Dhawan diving to his left at square-leg when the batsman swept Pushpakumara.
"When you work hard and it pays dividends, it gives you a lot of satisfaction. Those who are performing and those who are doing well should continue in more games than not and to be a consistent side I think we need to have continuity as well unless the situations where things are not controllable arise", Kohli said in a pre-match press conference.
"I always try to remain happy and that reflects in my game". I know which bowler I can target, I work on that basis. I have matured over the years. India's only concern coming into the Test was Kohli's atrocious form in Test cricket, something that seems to have been exacerbated by his captaincy.
Kohli and India toiled in the last session. Rahul settled down quickly on an easy-paced wicket with true bounce.
This was in breach of article 2.2.8 of the player's code of conduct which deals with "throwing a ball (or any other item of cricket equipment such as a water bottle) at or near a Player, Player Support Personnel, Umpire, Match Referee or any other third person in an inappropriate and/or unsafe manner during an International Match".
After bringing up his first 50 off 61 balls, Pandya needed just 25 more balls to reach triple figures as a listless Sri Lanka had no answers for the powerful right-hander.
Leading the spin attack in Rangana Herath's absence, off-spinner Dilruwan Perera failed to impress as Dhawan danced down the track in only his second over to loft him over mid-off and then fetched another boundary with a pull.
For Rahul, it was his seventh successive fifty in Test cricket overtaking Gundapppa Viswanath and Rahul Dravid (both with six half-centuries each).