Dortmund remain unbeaten in six league matches, but would have perhaps hoped for more after having 63% possession and 10 attempts on goal at Westfalenstadion.
© Getty Images
The hosts were looking to Marco Reus, who has scored four goals in five games to inspire their climb from relegation trouble to mid-table security, to continue his fine form.
However, Koln, who remain one point and two places below their opponents in the table, starved him of service and shackled Jurgen Klopp's side in the opening 45 minutes.
Dortmund's only clear first-half chance came within four minutes of the first whistle as Neven Subotic headed over from a set piece, but they otherwise failed to make the most of their territory as Timo Horn went largely untroubled in the Koln goal.
The visitors nearly took the lead against the run of play on 52 minutes as Deyverson blazed over the crossbar from 15 yards after a swift counter-attack.
Reus finally created an opening for himself just after the hour mark and shot towards the bottom corner, only for Horn to react smartly and palm away at full stretch.
Klopp introduced Jakub Blaszczykowski and Ciro Immobile in the second half in a bid to break the deadlock, but Dortmund will now welcome Juventus in their Champions League last-16 second leg on the back of two goalless outings.