在Heroku中使用Docker部署的node.js上的“错误R10(引导超时)-> Web进程在启动后60秒内未能绑定到$ PORT”

时间:2018-10-23 21:30:22

标签: node.js docker heroku

我正在尝试将应用程序部署到已对接的Heroku中。 这是我的Dockerfile:

FROM node:4.2.2

WORKDIR /usr/src
RUN git clone https://github.com/***.git

WORKDIR /usr/src/application

RUN ./install.sh

EXPOSE 80 3000
CMD bash -C '/usr/src/application/start.sh'

此外,我的个人资料只有一行,如下所示:

web: node bin/www

按照文档中的步骤,我已经通过两个命令推送了图像: heroku container:push web --app immense-falls-39679并与  heroku container:release web --app immense-falls-39679

在日志中,似乎一切正常,并且已成功部署了该应用程序。但是,当它即将开始(使用start.sh脚本)时,它会因错误而崩溃

2018-10-23T20:47:44.025502+00:00 app[web.1]: [20:47:44] Finished 'build-app' after 7.11 s
2018-10-23T20:47:44.025958+00:00 app[web.1]: [20:47:44] Starting 'bundle-release'...
2018-10-23T20:48:07.932228+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2018-10-23T20:48:07.932327+00:00 heroku[web.1]: Stopping process with SIGKILL
2018-10-23T20:48:08.058850+00:00 heroku[web.1]: Process exited with status 137
2018-10-23T20:48:08.097770+00:00 heroku[web.1]: State changed from starting to crashed

我已经研究过,并且大多数人说这是由于固定设置PORT值引起的。但是,在我的bin/www(服务器配置在哪里)中,我已经将端口设置为固定值或来自process.env

var app = require('../out/app');
var debug = require('debug')('server:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

app.set('port', (process.env.PORT || 3000));

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(app.get('port'), function() {
  listenForNotificationRequests();
});
server.on('error', onError);
server.on('listening', onListening);

关于如何修复它,我没有其他任何线索。我真的很感谢您的帮助。预先感谢

1 个答案:

答案 0 :(得分:0)

要将Docker容器部署到Heroku,您需要调整Dockerfile以与Heroku一起使用。

  1. 删除EXPOSE 80 3000,因为Heroku不使用它
  2. 部署时,该应用程序必须侦听Heroku设置的$ PORT。您的应用可以使用process.env.PORT访问此端口。如果您希望在Dockerfile cmd中传递端口,则可以使用CMD start_app_command -p $PORT

在部署后运行heroku logs --tail,您将看到$ PORT被Heroku设置的端口替换。

https://devcenter.heroku.com/articles/container-registry-and-runtime