У меня есть приложение 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? Что я могу сделать?