Italian ferry Norman Atlantic carrying 478 people caught fire north-west of Corfu.
Ships and helicopters are now taking part in a major rescue operation.
One person has died after jumping from the ship and another has been confirmed injured, officials say.
A total of 172 people have been rescued but more than 300 remain on the Norman Atlantic which was travelling from Patras in Greece to Ancona in Italy.
Choppy seas and strong winds are hampering the night-time rescue.
Most of those on board were Greek. Others came from Italy, Turkey, Albania, Germany and many other countries, officials said.
Italian media say the fire broke out on the ferry’s car deck before spreading.
Rescued passengers include a seven-month pregnant woman and her two children, who are all being treated for hypothermia, according to Italian media reports.
Two Italian and two Greek helicopters are taking turns to winch passengers from the ship, two at a time, Greek officials say.
Nearby merchant vessels aligned themselves in formation to protect the ship from waves and facilitate the rescue.
Italian and Albanian teams are also taking part in the rescue operation – some 19 nautical miles from the Albanian coast.
One of the passengers told Greek TV station Mega: “On the lower deck, where the lifeboats are, our shoes were starting to melt from the heat.”
Another passenger told the same station that smoke was engulfing the ship.
The chief executive of the Visentini group that owns the vessel, Carlo Visentini, said the ferry had passed a recent technical inspection despite a “slight malfunction” in one of the fire doors, Italy’s Ansa news agency reports.
“The tests confirmed that the boat was in full working order,” he said, adding that the fire door had been repaired “to the satisfaction of the inspectors”.
Ferries are an important mode of transport between Greece’s hundreds of islands as well as neighboring countries.
[youtube jdoK3kyAfy0 650]