8
votes

My App Service Linux instance crashes if my node app is using the start script: "start": "pm2 start server.js":

2019-04-15 11:36:34.432 ERROR - Container crime-digest__6ea5_0 for site crime-digest__6ea5 has exited, failing site start
2019-04-15 11:36:34.489 ERROR - Container crime-digest__6ea5_0 didn't respond to HTTP pings on port: 8080, failing site start. See container logs for debugging.

Container logs have nothing but the above error. If I use just: "start": "node server.js", the app starts just fine.

I understand that if the container doesn't respond via 8080 the container gets stopped, but I'm having process.env.PORT set as the port of my server so I can't figure out why the pm2 start script crashes the container.

I have a feeling that process.env.PORT is undefined if using the above start script because of some mixup in the process but can't find any way to debug it because after the container crashes I'm unable to ssh into it any more to inspect it.

I would really appreciate any suggestion, Thanks.

4
Creating an http server in my code instead of an https solved this issue for mepatchimou

4 Answers

4
votes

Are we trying to ping on PORT 8080? The problem here is that port 8080 is not exposed, so when we attempt to ping the container, we aren't pinging on a port on which the container is listening.

There are a couple of ways to resolve this.

  1. Use the EXPOSE instruction in your Dockerfile to expose port 8080.
  2. Use the WEBSITES_PORT app setting with a value of "8080" to expose that port.

You can refer the below mentioned articles:

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-rm-web-app-deployment?view=azure-devops

https://blogs.msdn.microsoft.com/waws/2017/09/08/things-you-should-know-web-apps-and-linux/

1
votes

Try adding the application setting PORT with the value of whatever port your app is listening on.

Ref: https://github.com/MicrosoftDocs/azure-docs/issues/34451

1
votes

I was having the same issue. When I changed the code in my server.js file to the below it succesfully ran:

const port = process.env.port || 8080;

After redeploying to Azure it is now working.

0
votes

I had this issue when working on Deploying a Rails Application to Azure Web App for Containers

When I deploy the app to the Azure, I will get the error below:

2021-07-29T10:29:05.571Z INFO  - Initiating warmup request to container devopsapptest_0_2eeeb139 for site devopsapptest
2021-07-29T10:29:07.733Z ERROR - Container devopsapptest_0_2eeeb139 for site devopsapptest has exited, failing site start
2021-07-29T10:29:07.737Z ERROR - Container devopsapptest_0_2eeeb139 didn't respond to HTTP pings on port: 80, failing site start. See container logs for debugging.

Here's how I solved it:

By default, App Service assumes your custom container is listening on port 80, however, my application was listening to requests on port 3000, which led to the error.

If your container listens to a different port, set the WEBSITES_PORT app setting in your App Service app. That is an WEBSITES_PORT as one of your app settings with the port your app is listening. In my case it was 3000.

You can set it in Azure CLI:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_PORT=8000

In Azure PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_PORT"="8000"}

Note: App Service currently allows your container to expose only one port for HTTP requests.

You may desire to also add the EXPOSE your-port command to the Dockerfile of your project. However, for my project I did not have to add the EXPOSE your-port command, and it worked fine for me.

Resources: Configure a custom container for Azure App Service

That's all.

I hope this helps