Против длинной, плотной линии русов Иоанн развернул по фронту три отдельных отряда. Позади пехоты на обоих флангах стояла тяжелая кавалерия, а во второй линии в центре — лучники и пращники, готовые вести губительный огонь по неприятелю, как только он окажется в пределах досягаемости.
До полудня противники стояли в готовности напротив друг друга. В полдень русы, не дожидаясь более атаки ромеев, ринулись вперед, оглашая окрестности раскатистым громовым кличем. В начале боя ромеи сумели сдержать натиск и в ряде пунктов прорваться сквозь плотную массу воинов Святослава, но он быстро перегруппировал свои силы. Теперь русы встречали контратаки сплошной стеной щитов. Более часа ожесточенный бой велся с переменным успехом, потом обе стороны отошли назад, чтобы подготовиться к новой схватке. Вскоре сражение возобновилось, и снова византийцы остановили славян, даже сумев несколько их потеснить, но ни расстроить, ни прорвать их линию не удалось. Очевидец событий, Лев Диакон, служивший в императорском штабе во время похода, пишет, что русы, имевшие славу непобедимых, не могли уступить поле боя, считая это личным позором для каждого воина, а ромеи не желали признать поражение от варваров, которые, по собственному выражению Льва, не могли даже коня оседлать. До вечера исход сражения оставался нерешенным, до тех пор, пока император не приказал тяжелой коннице атаковать на обоих флангах, а пехоте — усилить натиск в центре. Громкими боевыми криками по всей линии подбадривали ромеи своих латников, пока два бронированных клина не врубились в стену славянских щитов. Оба фланга были смяты и прижаты к центру. Всего за несколько минут фронт русов, прорванный на многих участках, полностью разрушился, и воины бросились обратно в крепость, чтобы успеть спастись прежде, чем их догонят преследователи или закроются ворота.
Император приказал сыграть сбор, и, как вспоминает Лев, солдаты возвращались в лагерь с победными песнями. Место для лагеря было выбрано в низине, на некотором расстоянии от крепости. Он был укреплен рвом и земляным валом, на котором густым частоколом установили копья и колья, развесив на них щиты. Лев Диакон обращает внимание, что это было обычной практикой организации ромейского лагеря во враждебной стране.
На следующий день имперские отряды приблизились к крепости и провели разведку боем некоторых фортов, но были встречены градом стрел и камней. В ходе перестрелки ни одна из сторон не понесла ощутимого урона, и византийцы отступили к лагерю, оставив крепость под постоянным наблюдением. К вечеру русы сделали вылазку, чтобы отогнать ромейские пикеты. Диакон пишет, что это был первый случай, когда славян увидели верхом. Но их неопытность в конном бою вскоре сказалась, и ромейская конница легко отбросила их обратно, в Доростол.
На этой стадии император, кажется, не хотел вести слишком жесткую осаду, а скорее пробовал выманить русов в поле, предпочитая победить в открытом сражении, а не штурмовать неприступные стены и башни крепости или брать ее измором.
Но Иоанн подготовился к любому развитию событий. На третий день осады Доростола к крепости подошел сильный византийский флот, доставивший припасы и подкрепления. Многие корабли были оборудованы машинами, извергающими греческий огонь. Средневековый напалм, выбрасывавшийся из труб, установленных на бортах судов, был уже известен русам. Именно этим оружием тридцатью годами ранее были сожжены корабли отца Святослава, Игоря. Прибытие флота, запершего славян на южном берегу Дуная, лишило их последнего шанса вырваться. Бурное ликование приободрившихся по этому поводу ромеев, очевидно, не способствовало подъему духа в рядах осажденных.
На следующий день Святослав в надежде разбить неприятеля снова вывел свою дружину в поле. И снова битва не выявила победителя, пока византийские тяжелые конники со своими убийственными булавами не опрокинули русов и не заставили их, сначала в порядке, а потом врассыпную, искать защиты за крепостными стенами.
Император приказал начать правильные осадные работы и установить метательные машины на валах вокруг города. На головы защитников непрерывной лавиной обрушились камни и стрелы, вызывая серьезные потери и упадок духа. Чтобы вывести эти орудия из строя, славянам приходилось предпринимать ночные вылазки. Во время одной из них сторожевой пост ромеев был захвачен врасплох и его начальник, Иоанн Куркуас, который, как сообщается, был мертвецки пьян, погиб. Этот Куркуас на всю армию славился богатством своего гардероба, и убивший его рус принял щеголя по одежде за императора. Он поднял отрубленную голову на копье и дразнил ромеев, хотя и без того эффекта, на который надеялся. Осадные машины остались неповрежденными и продолжали вести смертоносный огонь.
Несколько приободренные удачной вылазкой, русы на следующий день снова вышли из ворот, и Иоанн позволил им беспрепятственно построиться в боевой порядок. Ромеи выступили глубокой фалангой, с кавалерией на флангах. Лучники и пращники, как обычно, встали во второй линии, за тяжелой пехотой. Русам удалось глубоко вклиниться в фалангу и нанести ромеям тяжелые потери, но контратака конницы, поддержанной личным конвоем императора, восстановила положение, при этом главный воевода Святослава пал от руки личного телохранителя императора, Анемаса. Общее наступление ромеев на деморализованного неприятеля вызвало беспорядочное отступление к крепости.
Той же ночью открылись городские ворота, и воины русов вместе с членами их семейств вышли на поле битвы, чтобы найти и после погребальных обрядов предать огню тела своих близких. Был ли отдан ромейским войскам приказ не мешать им, или они бездействовали по своей инициативе, осталось невыясненным. После этого Святослав собрал своих командиров на военный совет. Некоторые воеводы предлагали прорываться на лодках на другой берег Дуная, сквозь блокаду византийского флота; другие стояли за немедленные переговоры с императором, чтобы спасти как можно больше жизней своих воинов. Один из сторонников переговоров вынужден был признать, что русы ничего не могли противопоставить закованной в броню византийской коннице, особенно потеряв лучших бойцов, на которых в битвах равнялись остальные.
Святослав отклонил оба предложения и при полной поддержке большинства собравшихся сказал, что русы сдаваться не привыкли, так что лучше всем погибнуть в бою и попасть прямо в Валгаллу. По свидетельству Льва Диакона, русы никогда не сдавались живыми в руки врагов.
В то же время приблизительно 2000 воинов в отчаянной попытке пополнить запасы продовольствия покинули Доростол в маленьких лодках и высадились на некотором расстоянии от крепости на южном берегу реки. Флот византийцев прозевал эту диверсию, несмотря на строжайший приказ императора никого не выпускать из осажденного города. Раздобыв провиант для своих товарищей, русы двинулись в обратный путь по берегу и случайно наткнулись на маленькую группу византийских кавалеристов, посланных напоить лошадей и собрать хворост. Захваченные врасплох ромеи были перебиты, и хотя в лагере подняли тревогу, русы успели вернуться в крепость со своей добычей раньше, чем их успели перехватить. Яростный гнев императора обрушился на головы его флотоводцев. Их халатность была причиной неоправданных потерь ромеев, позволила поднять боевой дух врага и пополнить его запасы. Иоанн предупредил, что виновные в повторении подобного проступка подвергнутся смертной казни.