Question: For a project, I created a prerender docker image after modifying the codes from prerender.io. I use systemd to run the docker container. It works fine in local machine and on one of the QA server, but the same image only returns 504 on a new QA server.

I checked the service log on the new QA and it shows 'response not sent for '.

After comparing the log between the old and new QA, I noticed that both services were able to get the index.html and other UI files but the service on the new QA did not make further ajax calls to the back-end. Instead, after fetching the front-end files, it logs 'response not sent for ' and then 'page timed out ' and 'parse html timed out ' and finally 'got 504 in 65230ms for ' (after adjusted the page load timeout).

There is an Nginx proxy listening to 80 and 443. I checked the firewall settings and 80 and 443 are allowed.

I am seeking for advice on where I should check with the 'response not sent' and 504 message.

Answer: 
This sounds like Chrome is just not working correctly in your Docker container. I assume it might not have the right permissions, the correct amount of RAM needed to load the page, or some other issue if it works locally and on the old QA server.

It looks like the Prerender server is working since it is requesting the page, timing out, and realizing the response was never sent back.

Could you try running the Prerender server on a different server that isn't using Docker to see if it works properly?
The container was assigned 128MB memory. After removing it, the service renders html as expected.