Изображение док-станции Heroku требует открытого порта - PullRequest
0 голосов
/ 16 мая 2019

У меня есть простой бот, размещенный на Docker, это отдельный файловый скрипт, который не требует никаких веб-сервисов.Я развернул его на Heroku, но он продолжает падать и из-за отсутствующего порта:

enter image description here

У меня есть следующие конфигурационные переменные:

enter image description here

Я попытался выставить порт на Docker EXPOSE $PORT, который не работал.Можно ли как-нибудь запустить этот скрипт на Heroku без сбоев из-за отсутствия порта?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Здесь есть как минимум две проблемы:

  1. Когда вы устанавливаете переменную окружения, не устанавливайте process.env.FOO.Просто установите FOO.Это создает (или обновляет) переменную среды.В коде JavaScript вы можете получать доступ к переменным среды через process.env, но это не является частью их имени.

    Вы можете сделать это в веб-интерфейсе, как показано на скриншотеили через команду heroku config , например

    heroku config:set FOO=bar
    
  2. В этом конкретном случае вы пытаетесь использовать переменную окружения PORT в обратном направлении. Вы не можете выбрать свой порт в Heroku. Heroku выбирает порт и назначает его вам, установив PORT.Ваш код должен учитывать любое значение, которое имеет эта переменная.

    Предполагая, что вы используете Express (в зависимости от использования process.env), вы захотите что-то вроде этого:

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

    Youтакже отметил ваш вопрос .В этом случае вы можете сделать что-то вроде

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

    и затем использовать port с любым веб-сервером, который вы используете.

0 голосов
/ 16 мая 2019

Вы установили значение $ PORT в файле docker или передали его в качестве аргумента env (-e) при запуске вашего контейнера. Я думаю, что он пытается связать $ PORT, а не фактический порт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...