It was the second deadly boat accident in less than a fortnight in the country, which has a history of ferry tragedies.
Rescue workers had recovered 16 bodies including an infant and two women, local administrator Rashida Ferdous told AFP, adding that she did not know the exact number of people missing.
She said a salvage vessel was on its way to raise the sunken vessel, adding that the master of the cargo ship and two other crew had been arrested.
Survivors said the twin-deck MV Mostofa was carrying between 70-150 passengers when it capsized in the middle of the Padma river, local police chief Rakibuz Zaman told AFP.
“Some 50 people swam ashore or were rescued by other vessels,” he added.
The vessel was reportedly heading to the town of Paturia in Manikganj district, some 70 kilometres (50 miles) from the capital Dhaka, from Rajbari district.
Local newspaper Prothom Alo quoted one survivor, Hafizur Rahman, as saying the cargo ship hit the boat 15 minutes after departure — causing it to overturn and trapping many passengers.
“I was on the deck of the ferry and fell into the river. Those who were on the deck were able to come out but none of the passengers inside could get out,” Rahman said.
Bangladeshi ferries do not normally keep passenger lists, making it difficult to establish how many are missing after an accident.
The Padma river is one of the largest in the delta nation. Boats are the main form of travel in many of Bangladesh’s remote rural areas, especially in the south and northeast.
Boat capsizes are common in Bangladesh, one of Asia’s poorest nations, which is criss-crossed by more than 230 rivers.
Experts blame poorly maintained vessels, flaws in design and overcrowding for most of the tragedies.
Earlier this month at least five people including a minor were killed when an overloaded ferry carrying some 200 passengers capsized in an estuary in the south of the country.
About 50 people were killed in August last year when a crowded ferry sank in rough weather in the Munshiganj district.
Some 150 people were killed in March 2012 after a overcrowded ferry carrying about 200 passengers sank after being hit by an oil barge in the dead of night.
In 2011 32 people were killed after a passenger vessel sank in the Meghna river in Munshiganj after colliding with a cargo ship.
At least 85 people drowned in 2009 when an overloaded triple-decker ferry capsized off Bhola Island in the south.
Naval officials have said more than 95 percent of Bangladesh’s hundreds of thousands of small and medium-sized boats do not meet minimum safety regulations. – AFP