Failing to push a NodeJS + AngularJS app to PAS – Pivotal Cloud Foundry (PCF)

Issue

I am trying to push a nodejs/angularjs app but getting below errors.

> Instance never healthy after 1m0s: Failed to make TCP connection to
> port 8080: connection refused; process did not exit

I have tried the following but failed miserably (Apologies, I am a newbie):

  1. Increased the timeout for healthcheck using -t to 600 or more but it is still failing.
  2. Upscaled the resources (RAM etc.) and that did not help either.
  3. Waited overnight for the issue to magically disappear…

Output of cf logs apptheone --recent:

>    2019-10-24T14:46:29.56+0530 [CELL/0] OUT Downloading droplet...   
> 2019-10-24T14:46:30.64+0530 [CELL/0] OUT Downloaded droplet   
> 2019-10-24T14:46:30.87+0530 [CELL/0] OUT Starting health monitoring of
> container    2019-10-24T14:46:31.93+0530 [APP/PROC/WEB/0] OUT >
> ap[email protected] start /home/vcap/app    2019-10-24T14:46:31.93+0530
> [APP/PROC/WEB/0] OUT > node build.js && http-server -a localhost -p
> 8000 -c-1 ./app    2019-10-24T14:46:32.15+0530 [APP/PROC/WEB/0] OUT
> Starting up http-server, serving ./app    2019-10-24T14:46:32.15+0530
> [APP/PROC/WEB/0] OUT Available on:    2019-10-24T14:46:32.15+0530
> [APP/PROC/WEB/0] OUT   http://localhost:8000   
> 2019-10-24T14:46:32.15+0530 [APP/PROC/WEB/0] OUT Hit CTRL-C to stop
> the server    2019-10-24T14:47:31.64+0530 [HEALTH/0] ERR Failed to
> make TCP connection to port 8080: connection refused   
> 2019-10-24T14:47:31.64+0530 [CELL/0] ERR Timed out after 1m0s: health
> check never passed.    2019-10-24T14:47:31.64+0530 [CELL/SSHD/0] OUT
> Exit status 0    2019-10-24T14:47:47.73+0530 [CELL/0] OUT Cell
> 91bc6c2e-8684-46ac-9047-a62e099b0941 stopping instance
> 37f79676-3d09-4e44-4f79-fab8    2019-10-24T14:47:47.73+0530 [CELL/0]
> OUT Cell 91bc6c2e-8684-46ac-9047-a62e099b0941 destroying container for
> instance 37f79676-3d09-4e44-4f79-fab8    2019-10-24T14:47:47.74+0530
> [API/1] OUT Process has crashed with type: "web"   
> 2019-10-24T14:47:47.76+0530 [API/1] OUT App instance exited with guid
> cb94664f-0016-48b3-8467-15d128e4521b payload:
> {"instance"=>"37f79676-3d09-4e44-4f79-fab8", "index"=>0,
> "cell_id"=>"91bc6c2e-8684-46ac-9047-a62e099b0941",
> "reason"=>"CRASHED", "exit_description"=>"Instance never healthy after
> 1m0s: Failed to make TCP connection to port 8080: connection refused;
> process did not exit", "crash_count"=>6,
> "crash_timestamp"=>1571908667728853273,
> "version"=>"25df8154-3283-4807-b0eb-d0f7351ec85d"}   
> 2019-10-24T14:47:47.90+0530 [PROXY/0] OUT Exit status 137   
> 2019-10-24T14:47:48.64+0530 [CELL/0] OUT Cell
> 91bc6c2e-8684-46ac-9047-a62e099b0941 successfully destroyed container
> for instance 37f79676-3d09-4e44-4f79-fab8

Output of cf events apptheone:

> 2019-10-24T14:21:47.00+0530   app.crash                  bobthefixerB 
> index: 0, reason: CRASHED, cell_id:
> 91bc6c2e-8684-46ac-9047-a62e099b0941, instance:
> 64e466c1-8b7e-41d5-5a80-7408, exit_description: Instance never healthy
> after 1m0s: Failed to make TCP connection to port 8080: connection
> refused; process did not exit 2019-10-24T14:21:47.00+0530  
> audit.app.process.crash    web                     index: 0, reason:
> CRASHED, cell_id: 91bc6c2e-8684-46ac-9047-a62e099b0941, instance:
> 64e466c1-8b7e-41d5-5a80-7408, exit_description: Instance never healthy
> after 1m0s: Failed to make TCP connection to port 8080: connection
> refused; process did not exit 2019-10-24T14:06:29.00+0530  
> audit.app.process.crash    web                     index: 0, reason:
> CRASHED, cell_id: d5d90154-3642-4ff0-8ed7-00ea8c96bb5d, instance:
> 899dc217-0cfa-418a-7920-3814, exit_description: Instance never healthy
> after 1m0s: Failed to make TCP connection to port 8080: connection
> refused; process did not exit

Here is what our package.json looks like:

{
  "name": "apptheone",
  "private": true,
  "version": "1.0.0",
  "description": "bla bla blaa",
  "license": "MIT",
  "devDependencies": {
    "chai": "^4.1.2",
    "check-dependencies": "^1.1.0",
    "eslint": "^4.19.1",
    "eslint-config-google": "^0.9.1",
    "http-server": "^0.10.0",
    "loadash": "^1.0.0",
    "mocha": "^5.0.5",
    "protractor-jasmine2-html-reporter": "0.0.7"
  },
  "scripts": {
    "update-deps": "npm update",
    "start": "node build.js && http-server -a localhost -p 8000 -c-1 ./app",
    "protractor": " cd ./tests && protractor protractor.conf.js",
    "test": "node node_modules/mocha/bin/mocha node-red/test/**/*.js"
  },
  "dependencies": {
    "auditjs": "^2.4.3",
    "bower": "^1.8.4",
    "dependency-check": "^3.1.0",
    "jslint": "^0.11.0",
    "json-formatter-js": "^2.2.0",
    "npm": "^5.8.0",
    "requirejs": "^2.3.5",
    "shelljs": "^0.8.3"
  }
}

NOTE: When I tried to push the app for the first time I was able to successfully do so with a simple cf push apptheone and the static webpage was live as well. But then I was playing around with the PCF UI and removed the application and it’s associated services/routes and I haven’t been able to push the same app ever since. No changes to the app code at all.

Solution

Please double check that your application is listening on 0.0.0.0 as opposed to localhost. When only listening on localhost, this can cause the health check to fail because your app is not available outside of the container where it’s running.

Answered By – Daniel Mikusa

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published