我在Docker上托管了一个简单的bot,它是单个文件脚本,不需要任何Web服务。我将其部署在Heroku上,但由于端口丢失而不断崩溃:
我有以下配置变量:
我尝试在Docker EXPOSE $PORT
上公开一个无效的端口。有没有一种方法可以让我在Heroku上运行此脚本而不会由于缺少端口而导致常规崩溃?
答案 0 :(得分:1)
这里至少有两个问题:
设置环境变量时,请勿设置process.env.FOO
。只需设置FOO
。这将创建(或更新)环境变量。在JavaScript代码中,您可以通过process.env
访问环境变量,但这不是其名称的一部分。
您可以在屏幕截图中显示的网络用户界面中进行操作,也可以通过the heroku config
command进行操作,例如
heroku config:set FOO=bar
在这种情况下,您尝试向后使用PORT
环境变量。 您不必在Heroku上选择端口。 Heroku 会选择一个端口并通过设置PORT
将其分配给您。您的代码必须尊重该变量具有的任何值。
假设您使用的是Express(基于您对process.env
的使用),您将需要以下内容:
const PORT = process.env.PORT || 5000;
express().listen(PORT);
您还用python标记了您的问题。在这种情况下,您可以做类似的事情
import os
port = os.getenv('PORT', default='5000')
,然后将port
与正在使用的任何Web服务器一起使用。
答案 1 :(得分:0)
在运行容器时是否在dockerfile中设置了值$ PORT或将其作为env参数(-e)传递。我认为它试图绑定$ PORT而不是实际端口。