Оборона города была возложена на Отдельную Приморскую армию под командованием генерал-лейтенанта Софронова и силы Черноморского флота.
Ожесточенное сопротивление советских войск, получивших приказ любой ценой отстоять Одессу, растянуло штурм города более чем в два месяца. Войска Южного фронта отошли за Днепр от Никополя до Херсона, в результате Одесса осталась в глубоком тылу противника. 19 августа 1941 года образован Одесский оборонительный район, подчиненный Черноморскому флоту. Его возглавил контр-адмирал Г.В.Жуков. К 20 августа румынские войска прорвали советскую оборону в Восточном секторе между Куяльницким лиманом и побережьем Черного моря. Благодаря этому противник получил возможность систематически обстреливать из орудий город и часть побережья.
22 сентября 1941 года по прорвавшейся в Восточном секторе группировке румынских войск был нанесен комбинированный удар. Ночью в районе населенного пункта Григорьевка отряд кораблей Черноморского флота высадил десант в составе полка морской пехоты для содействия войскам, оборонявшим Одессу. В результате согласованных действий советских войск противник был отброшен от Одессы на 5- 8 км, его потери составили приблизительно 2 тысячи человек.
Однако к концу сентября в результате успешного наступления частей группы армии Юг в направлении на Донбасс и Крым положение Южного фронта резко ухудшилось. 30 сентября Ставка приняла решение эвакуировать Одесский оборонительный район и направить его войска для обороны Крыма. С 1 по 16 октября Черноморский флот провел операцию по эвакуации войск в Севастополь.
Вечером 16 октября румынские части заняли Одессу. По советским данным, за дни штурма города румынские войска потеряли около 160 тысяч солдат, 200 самолетов и около 100 танков.