我正在尝试将应用程序部署到已对接的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);
关于如何修复它,我没有其他任何线索。我真的很感谢您的帮助。预先感谢
答案 0 :(得分:0)
要将Docker容器部署到Heroku,您需要调整Dockerfile以与Heroku一起使用。
EXPOSE 80 3000
,因为Heroku不使用它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