Докеризованный узел на AWS Elastic Beanstalk. Ошибка 502 BadGateway - PullRequest
0 голосов
/ 30 октября 2018

У меня есть приложение Node (приложение Isomorphic React), которое было закреплено и развернуто в AWS Elastic Beanstalk. У меня есть вся информация ниже, но если вы хотите tldr: Как настроить перенаправление портов между хостом и контейнером в AWS Elastic Beanstalk, т.е. 5000: 3000?

Я хочу, чтобы мое приложение работало так (номера указаны в портах):

End User --80--> EC2 Instance / Nginx --5000--> Container --3000--> Application 

Я использовал Dockerfile для EXPOSE 5000. Я знаю, что это всего лишь предложение, но, насколько я знаю, Amazon использует его для предоставления портов в контейнере Docker вместо docker-compose.yml. Приложение работает на порту 3000. Код в узле для запуска на порту 3000:

process.env.PORT || 3000

При попытке получить доступ к сайту через порт 80 я получаю сообщение об ошибке 502 Bad Gateway.

Я подключился по SSH к экземпляру EC2, на котором размещен мой докер-контейнер. Конфигурация nginx для эластичного стебля выглядит следующим образом:

upstream docker {
    server [CONTAINER_IP]:5000;
    keepalive 256;
}

IP - это правильный IP-адрес контейнера (я проверил с помощью Docker Inspect). Когда я бегу: sudo docker ps -a

Я получаю:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    REDACTED        REDACTED        "node server.js"    34 hours ago        Up 34 hours         5000/tcp            jolly_williams

Если я запускаю netstat на экземпляре хоста EC2, я вижу, что порт 80 открыт:

tcp        0      0 0.0.0.0:80

Когда я просматриваю журналы на экземпляре хоста EC2, я вижу эту ошибку несколько раз для разных ресурсов:

запрос: "GET / HTTP / 1.1", восходящий поток: "http://[CONTAINER_IP]:5000/", хост: соединение [URL-адрес Beanstalk] отклонено

Теперь вот кикер, он работает, когда я бегу:

sudo curl [ContainerIP]:3000 (from the EC2 host intance)

-или-

sudo docker exec -ti [CONTAINER_NAME] curl http://localhost:3000

Кто-нибудь знает, почему узел работает на 3000, а не на 5000? Что я могу сделать?

1 Ответ

0 голосов
/ 01 ноября 2018

Говорил с поддержкой AWS. Они говорят, что порт док-станции должен быть тем же портом, который приложение слушает, т. Е. Нет сопоставления портов

...