A suspect shouted out “Allahu Akbar” (God is Greatest) before causing the blast, a witness said.
Belgium’s national crisis centre said the suspect had been “neutralised” and the situation was under control.
The incident happened just before 1900 GMT, causing Brussel’s Gare Centrale to be evacuated. The nearby Grand Place, a major tourist destination, was also evacuated.
“There was man and a small explosion took place near him. Soldiers neutralised him with gunfire. No one (else) was injured,” federal police spokesman Peter De Waele said by phone to AFP.
Social media images showed an intense yet contained ball of fire in the station’s underground arrival hall.
“I went down to the mezzanine level, someone was shouting. Then he cried ‘Allahu Akbar’, and he blew up a trolley,” Nicolas Van Herrewegen, a railway sorting agent, told reporters.
“I was behind a wall when it exploded. I went down and alerted my colleagues to evacuate everyone. He (the suspect) was still around but after that we didn’t see him.”
Van Herrewegen added: “It wasn’t exactly a big explosion but the impact was pretty big. People were running away.”
He described the suspect as well-built and tanned with short hair, wearing a white shirt and jeans.
“I saw that he had something on him because I could see wires emerging, so it may have been a suicide vest,” Van Herrewegen said.
About an hour after the events, the situation was “under control”, the federal crisis centre said in a tweet.
Gare Centrale is largely underground, located in the heart of Brussels, a few blocks from the Grand Place and the Manneken Pis statue.
It appeared that the suspect was neutralised by soldiers who have been deployed at railway stations and government buildings in Brussels since the aftermath of the Paris terror attacks when a link to Belgium was first established.
Firefighters were called to the scene after the report of the small explosion, RTBF broadcaster reported.
Brussels has been on high alert since Islamic State suicide bombers struck the city’s airport and metro in March 2016, killing 32 people and injuring hundreds more.
The Islamic State group claimed the attacks, which were carried out by the same jihadist cell behind the November 2016 Paris attacks that killed 130 people.
Belgium suffered a further shock last August when a machete-wielding man shouting “Allahu akbar” attacked two policewomen in the industrial town of Charleroi, before being shot dead.
The country’s law enforcement agencies and intelligence services came under intense scrutiny after the attacks for apparently missing a series of leads after the Paris attacks that could have led to the Brussels bombers.