The captain of the ferry MV Thomas Aquinas ordered the ship abandoned after it began listing and then sank after hitting the cargo vessel, coast guard officer Joy Villegas said.
He said two coast guard vessels and other nearby ships were involved in the rescue operation not far from the port of Cebu.
There was no immediate word on casualties, but passenger Jerwin Agudong told radio station DZBB that some people were trapped and he saw bodies in the water.
"It seems some were not able to get out. I pity the children. We saw dead bodies on the side, and some being rescued," he said.
He said the ferry was entering the pier when the cargo vessel, which was on the way out, suddenly collided with the ship. He said he and other passengers jumped in front of the cargo vessel.
"One of the persons who jumped with us hit his head on metal. He is shaking and he is bloodied," Agudong said.
He said the crew of the ferry distributed life jackets while the ship was slowly sinking.
He said the ferry came from Nasipit in Agusan del Sur province in the southern Philippines on a daylong journey.