Google Compute Engine App ничего не слушает на портах 80 и 443 - PullRequest
0 голосов
/ 28 января 2019

Мой пост очень похож на этот .У меня есть контейнер Docker, на котором запущено очень простое приложение node.js / express, прослушивающее порт 3000, на Google Compute Engine с включенными правилами брандмауэра http и https.

По какой-то причине, однако, ни один процесс не прослушиваетобщественные порты (443 и 80).Когда я набираю sudo netstat -tnlp tcp, я получаю:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address     Foreign Address   State       PID/Program name    
tcp        0      0 0.0.0.0:5355      0.0.0.0:*         LISTEN      288/systemd-resolve 
tcp        0      0 0.0.0.0:22        0.0.0.0:*         LISTEN      296/sshd            
tcp6       0      0 :::5355           :::*              LISTEN      288/systemd-resolve 
tcp6       0      0 :::3000           :::*              LISTEN      1216/node    

Также, когда я запускаю nmap <EXPOSED_IP>, я получаю:

Not shown: 993 filtered ports
PORT     STATE  SERVICE
21/tcp   open   ftp
22/tcp   open   ssh
80/tcp   closed http
443/tcp  closed https
554/tcp  open   rtsp
3389/tcp closed ms-wbt-server
7070/tcp open   realserver

Я знаю, что ничего не слушает порты 443 или порт80, и я вижу, что мое приложение прослушивает порт 3000, но я не уверен, как это изменить / отобразить / выставить.Я попытался изменить свой docker-compose на:

...

ports:
  - "80:3000"
  - "443:3000"
  - "3000:3000"
...

Но, похоже, это не сработало.Я знаю, что я не использую docker-compose в ВМ, так что имеет смысл, что это не имеет значения.Я прочитал здесь Я не должен показывать публичные порты в Dockerfile, чтобы иметь возможность запускать несколько контейнеров на одном экземпляре виртуальной машины, что имеет смысл.Но все еще не уверен, как сопоставить 443 и 80 с моим контейнером.Есть идеи?

ОБНОВЛЕНИЕ:

Согласно документации :

Вы можете развернуть только один контейнер для каждого экземпляра виртуальной машины.Рассмотрим Kubernetes Engine, если вам нужно развернуть несколько контейнеров на один экземпляр виртуальной машины.Свяжитесь с командой, если ваш вариант использования требует от вас развертывания нескольких контейнеров в экземпляре Compute Engine.

Похоже, мне разрешено запускать только один контейнер на ВМ, так что, возможно, я попытаюсь переслатьпорты на моем Dockerfile ...

1 Ответ

0 голосов
/ 31 января 2019

Я наконец понял это.100

Оказывается, я пытался управлять портами из Dockerfile, который явно не контролирует хост.

Поэтому я включил ответ из этого поста :

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

при создании моего шаблона экземпляра Google Compute следующим образом:

--metadata startup-script="sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000"

А затем создал экземпляр на основе этого шаблона.Ура для обучения!

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