De stad is ontstaan aan het riviertje de Thuredriht, de latere Voorstraatshaven. In 1271 werd een gracht langs de stadsmuur gegraven, de huidige Spuihaven. Het water was niet alleen bedoeld als verdediging maar ook als haven. Tot in de negentiende eeuw was deze Spuihaven de zuidelijke grens van de stad. Een volgende uitbreiding van de stad betekende een grote versmalling van de rivier de Oude Maas. Kort na 1400 werd begonnen de rivier voor de stad uit te diepen en met de vrijgekomen specie een zandplaat op te hogen en kades te maken. Tussen de kades en de zandplaat kwam in 1410 de Nieuwe Haven. Op het nieuwe eiland voor de stad werden later straten als de Hoge Nieuwstraat en beide Walevesten aangelegd.
Die Nieuwe Haven had een groot probleem: de haven verzandde en werd steeds ondieper. Af en toe werden wel weer wat Sliedrechters gehaald om de haven uit te diepen, maar uiteindelijk werd in 1609 besloten nóg een haven te graven en deze haven te verbinden met de Nieuwe Haven. Dat werd de Wolwevershaven. De doorstroming bij de Roobrug zorgde er voor dat beide havens beter op diepte bleven, al moest er later toch geregeld worden gebaggerd. In 1647 kwam er weer een haven bij, het Maartensgat aan de voet van de Grotekerkstoren.
Maar nog kwam de stad havens te kort. Daarom werd vrij kort daarna weer een grote haven gemaakt, op ongeveer dezelfde manier als eerder was gebeurd bij Nieuwe Haven en Wolwevershaven. Kalkschepen moesten in deze haven, de Kalkhaven, aanleggen om stof- en stankoverlast in de stad te voorkomen. De Kalkhaven werd de zeehaven van de stad. Daarom werd het Mallegat gegraven voor een betere verbinding met de Dordtse Kil en de waterweg naar zee via het Hollandsch Diep. Ook kwamen er havens bij de Weeskinderendijk (Spieringhaven, Papegat) en onder aan de Noordendijk, bij de Lijnbaan, maar die werden voornamelijk gebruikt om hout op te slaan.
Daarna gebeurde er 250 jaar lang weinig tot niets op havengebied in Dordrecht. De stad verloor steeds meer handel aan Rotterdam, ook al omdat de Dordtse waterweg naar zee slecht was en de regering daar weinig aan deed.
Pas in 1915 kwam er, een heel eind buiten de stad aan de ´s-Gravendeelse dijk, een haventje bij, dat vijftien jaar later werd vergroot. Koningin Wilhelmina opende in 1930 die naar haar genoemde zeehaven. De haven was hard nodig want de spoorbrug over de Oude Maas was al meer dan vijftig jaar een grote hinderpaal voor zeeschepen die de Kalkhaven probeerden te bereiken. In 1958 kwam er nog een zeehaven bij die werd geopend door koningin Juliana.
Vanaf 1952 werd ook begonnen om aan de andere kant van het eiland de drie Merwedehavens en de Baanhoekhaven aan te leggen. De Derde Merwedehaven werd eind jaren zestig gegraven in opdracht van het dorp Sliedrecht dat daar op het Eiland van Dordrecht nog eigenaar was van de grienden. In 1970 kwam de haven, door een grenswijziging, op Dordts grondgebied te liggen. Tegen de verwachting in vestigden zich maar weinig bedrijven op de terreinen bij de haven. Vanaf 1993 werd daarom de Derde Merwedehaven voor het grootste deel volgestort met afval. Sinds 1 januari 2013 is de stort van afvalstoffen gestopt.