【问题标题】:Heroku docker image requires an open portHeroku docker 镜像需要一个开放的端口
【发布时间】:2019-05-16 03:57:00
【问题描述】:

我在 Docker 上托管了一个简单的机器人,它是一个不需要任何 Web 服务的单文件脚本。我将它部署在 Heroku 上,但由于缺少端口,它不断崩溃:

我有以下配置变量:

我尝试在 Docker EXPOSE $PORT 上公开一个端口,但没有成功。有没有办法让这个脚本在 Heroku 上运行而不会因为缺少端口而经常崩溃?

【问题讨论】:

  • 您是否能够使用下面显示的任何一个答案来解决这个问题?如果是这样,请记得accept it。这会向其他用户显示您找到了解决方案。
  • 不,我没有成功
  • 您是否尝试了我在回答中描述的所有内容?这应该可以让你大部分时间到达那里。

标签: python docker heroku configuration


【解决方案1】:

这里至少有两个问题:

  1. 设置环境变量时,不要设置process.env.FOO。只需设置FOO。这会创建(或更新)一个环境变量。在 JavaScript 代码中,您可以通过process.env访问环境变量,但这不是它们名称的一部分。

    您可以在网页界面中执行此操作,如屏幕截图中所示,或通过the heroku config command,例如

    heroku config:set FOO=bar
    
  2. 在这种特定情况下,您尝试向后使用 PORT 环境变量。 您无法在 Heroku 上选择您的端口。 Heroku 选择一个端口并通过设置 PORT 将其分配给您。您的代码必须尊重该变量的任何值。

    假设您使用的是 Express(基于您对 process.env 的使用),您会想要这样的东西:

    const PORT = process.env.PORT || 5000;
    
    express().listen(PORT);
    

    您还用 标记了您的问题。在这种情况下,您可以执行类似的操作

    import os
    
    port = os.getenv('PORT', default='5000')
    

    然后将port 与您正在使用的任何网络服务器一起使用。

【讨论】:

    【解决方案2】:

    您是在 dockerfile 中设置值 $PORT 还是在运行容器时将其作为 env 参数 (-e) 传递。我认为它试图绑定 $PORT 而不是实际的端口。

    【讨论】:

    • 我传递了 $PORT 的值,如何将 env 变量传递给 dockerfile。
    • docker run --env "PORT=5000" my_image:my_tag
    • 我尝试在 Heroku 上运行此命令,但我的机器人服务仍然崩溃
    • 嘿阅读此链接中的端口转发部分(deparkes.co.uk/2018/05/28/deploy-docker-to-heroku
    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2017-03-01
    • 2017-08-31
    • 2020-09-09
    相关资源
    最近更新 更多