LoginSignup
4
2

More than 5 years have passed since last update.

"failure to make TCP connection"でIBM CloudにNodeのアプリがデプロイできない

Last updated at Posted at 2017-09-13

はじめに

IBM Cloud(旧 Bluemix)にローカルでは動いていたNodeのアプリをデプロイしようとしたが、以下のエラーが出てデプロイに失敗していた

2017-09-13T11:01:23.75+0900 [HEALTH/0]   ERR healthcheck failed: failure to make TCP connection: dial tcp 10.254.1.74:8080: getsockopt: connection refused
2017-09-13T11:01:23.75+0900 [HEALTH/0]   ERR Exit status 4
2017-09-13T11:00:14.98+0900 [CELL/0]     ERR Timed out after 1m0s: health check never passed.

原因(と思われるところ)

ポート番号を指定するところが悪かったみたい

app.js
var http = require("http");
var express = require('express');
var bodyParser = require('body-parser');

//ベーシック認証
var basicAuth = require('basic-auth-connect');

var samples = require('./routes/samples');

var app=express();
app.use(bodyParser.json());
app.use(basicAuth('test','test'));
app.use(express.static(__dirname + '/public')); //setup static public directory
// app.use('/samples', samples);
app.use('/', samples);

//↓ここの部分!
var server_http=http.createServer(app).listen(3000, function() {
  console.log('Listening on port %d', server_http.address().port);
});

解決方法

ここに"process.env.PORT ||" を追記した

var server_http=http.createServer(app).listen(3000, function() {

var server_http=http.createServer(app).listen(process.env.PORT || 3000, function() {

一行しか変わっていませんが、修正後のコードです

app.js
var http = require("http");
var express = require('express');
var bodyParser = require('body-parser');

//ベーシック認証
var basicAuth = require('basic-auth-connect');

var samples = require('./routes/samples');

var app=express();
app.use(bodyParser.json());
app.use(basicAuth('test','test'));
app.use(express.static(__dirname + '/public')); //setup static public directory
// app.use('/samples', samples);
app.use('/', samples);

//修正箇所
var server_http=http.createServer(app).listen(process.env.PORT || 3000, function() {
  console.log('Listening on port %d', server_http.address().port);
});

これでうまくいきました
IBM Cloud(旧 Bluemix)にデプロイする際にはポート番号固定ではうまくいかないようです。
このようにすると、ローカルで実行した際にはprocess.env.PORTが定義されていないので、ポート番号は3000番が指定され、Bluemixではprocess.env.PORTで取得したポート番号が指定されます(そうなるはずです)。

IBM Cloud(旧 Bluemix)でNodeのアプリを開発する際にはこちらの投稿が参考になると思います。
BluemixにデプロイしたNode.jsアプリが起動しない!そんなときは、ローカル環境で確認しましょう

編集履歴

2017/12/11
記事内のBluemix→IBM Cloudに変更
(Bluemixの名称がIBM Cloudになったため)

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2