Croatia has closed seven of its eight road border crossings with Serbia following a huge influx of migrants.
Officials in Zagreb said they had no choice after more than 10,000 people entered the country a day after Hungary fenced off its border with Serbia.
Meanwhile, Slovenia said it had stopped a group of migrants on a train and would return them to Croatia.
Huge numbers of people heading north from the Mediterranean have created a political crisis in the European Union.
Croatian officials said roads leading to the border crossings had also been shut.
The crossing on the main road linking Belgrade and Zagreb - at Bajakovo - appeared to be the only one left open.
The BBC's Guy Delauney in Zagreb says the closures have cut off the migrants' main land route from Greece to northern Europe.
Croatia has tried to take people to asylum centres but the overwhelming numbers mean that many people have been left on the streets, he says.
Some have told the BBC they plan to walk north to neighbouring Slovenia which is in the EU's border-free Schengen Area.
On Thursday, Croatian Interior Minister Ranko Ostojic said his country was "absolutely full".
He said his message to the migrants was: "Don't come here any more. Stay in refugee centres in Serbia and Macedonia and Greece. This is not the road to Europe. Buses can't take you there. It's a lie."
Croatian Prime Minister Zoran Milanovic said the country had "limited capacity".
Scuffles broke out in two locations on the border with Serbia on Thursday after people were left waiting for hours for transport further north.
The BBC's Lyse Doucet, at Tovarnik, said buses arrived just before midnight but not enough to transport everyone. Drivers said people were being taken to a reception centre. Thousands of people left behind are spending the night sleeping on roadsides and in fields.
There was a mad rush as the first train for 24 hours pulled in on Thursday evening, she adds.
It was Hungary's decision to seal its border with Serbia that triggered the move by thousands of migrants, who had travelled to Serbia via Macedonia and Greece, to try to reach Western Europe via Croatia instead.
Images of Hungarian police trying to disperse people with tear gas and water cannon have been criticised by the United Nations' top human rights official.
Hungarian media reported on Thursday that migrants were crossing from Croatia into Hungary at Illocska, thus avoiding the razor-wire fence on Hungary's border with Serbia.
Hungary says it will now extend its fence along its border with Romania.
Late on Thursday, Slovenian police said they had stopped a train carrying asylum seekers at Dobova on the border with Croatia.
"During a regular border control of the train... it was established that 150 out of the 300 passengers did not meet the requirements for entering Slovenia," a border police spokesman told journalists.
He said they would be returned to Zagreb as soon as possible.
Those on board the train shouted their dissatisfaction at journalists and at nearby police officers who were patrolling with dogs. Slovenian radio said 16 police vehicles had been sent to the station.
The crisis has challenged the Schengen agreement, with Germany, Austria and Slovakia all re-imposing checks on parts of their borders.
EU regulations dictate the refugees must register and claim asylum in the first member state they reach. But many migrants and refugees wish to continue on to Germany and Austria, and do not wish to seek asylum in smaller, less well-off EU nations such as Hungary, Croatia and Slovenia.
The EU has called a leaders' summit for 23 September to discuss the crisis.
The European Parliament has voted to back plans for the mandatory relocation of 120,000 refugees around the EU, but interior ministers from EU countries have not so far been able to reach agreement on the plan.
Germany and France are in favour of the proposals - but Hungary, Poland, the Czech Republic and Slovakia are among several EU members which are strongly opposed.
However, on Thursday the Czech prime minister indicated his country could voluntarily offer asylum to around 10,000 refugees - far more than the 1,500 the Czech Republic has so far agreed to accept.