Nginx中的Heroku(Docker)PORT环境变量

Mar*_*jan 6 nginx heroku docker dockerfile

我只是对Dockerfile进行了一些修改,以便在Heroku上使用Nginx运行它。Heroku的特别之处在于,所有内容都以非root用户身份运行。第二种特定行为是使用来自Heroku本身的随机端口,您不能对其进行修改。它们提供了env $ PORT,您应该将其绑定到nginx。如果Heroku识别到某项未绑定到该端口,则会停止整个容器。问题是:

如何将nginx绑定到给定的env变量,以便在nginx-site.conf中具有动态端口?我试图在Dockefile中使用如下内容

env PORT;nginx.conflisten PORT_from_env;nginx的-site.conf 还试图listen 80;nginx的-site.confRUN /bin/sed -i "s/listen 80/listen ${PORT}/" /etc/nginx/sites-available/default.confDockerfile

我绝对超能力。有人有想法或可以帮忙吗?这将非常有帮助!


更多信息:

Jim*_*mmy 6

通过遵循以下示例,我将其用于我的应用程序:

第1步:$PORTdefault.conf.template

server {
  listen $PORT default_server;

  location / {
    root   /usr/share/nginx/html;
    index  index.html;
  }
}
Run Code Online (Sandbox Code Playgroud)

步骤2:将此指令添加到您的Dockerfile

COPY default.conf.template /etc/nginx/conf.d/default.conf.template
Run Code Online (Sandbox Code Playgroud)

第3步:在您的末尾添加Dockerfile

CMD /bin/bash -c "envsubst '\$PORT' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf" && nginx -g 'daemon off;'
Run Code Online (Sandbox Code Playgroud)


Dam*_*IEU 0

您需要在启动时更新 nginx 配置。
请参阅此构建包作为示例(我尚未测试它是否有效)。