Как получить доступ к угловому приложению node.js вне контейнера

У меня есть угловое приложение node js, которое я пытаюсь поместить в контейнер.

  1. я использую файл Docker для создания образа и запуска докера
  2. я не получаю никаких ошибок, и сборка прошла успешно сборка Node.js

Dockerfile


person Ajay R    schedule 04.08.2019    source источник
comment
** Angular Live Development Server прослушивает 0.0.0.0:4100, откройте браузер на localhost:4100 ** ℹ 「wdm」: успешно скомпилировано.   -  person Ajay R    schedule 04.08.2019
comment
Укажите всю команду dockerfile и docker run.   -  person mchawre    schedule 04.08.2019
comment
# Извлечение образа NODE FROM node:latest # Создание основного каталога для работы с Docker RUN mkdir /usr/src/app # Настроить основной каталог как рабочий WORKDIR /usr/src/app # Скопировать каталог проекта в рабочий каталог DOCKER КОПИРОВАТЬ . /usr/src/app # Команда для установки Angular-Cli@project_version RUN npm install RUN npm uninstall -g @angular/cli RUN npm install -g @angular/[email protected] RUN npm link @angular/cli RUN ng config -g cli.warnings.versionMismatch false #RUN npm run-script build EXPOSE 8080 CMD ng serve --port 4100   -  person Ajay R    schedule 04.08.2019
comment
пожалуйста, обновите его в вопросе, я не вижу его должным образом в комментариях.   -  person mchawre    schedule 04.08.2019
comment
добавлены снимки экрана для файла докера и вывод сборки nodejs @mchawre   -  person Ajay R    schedule 04.08.2019
comment
Как вы думаете, зачем нам нужны скриншоты?   -  person jonrsharpe    schedule 04.08.2019
comment
@AjayR вы предоставляете доступ к порту 8080 и прослушиваете приложение 4100, сначала откройте 4100, затем docker run -p 4100:4100 youimage:tag   -  person Adiii    schedule 04.08.2019
comment
я не могу вставить код файла докера, поэтому я разместил снимки экрана. @jonrsharpe   -  person Ajay R    schedule 04.08.2019
comment
Почему нельзя вставить? Это просто текст.   -  person jonrsharpe    schedule 04.08.2019
comment
@Adiii, я сделал то же самое, но все еще не могу получить доступ к своей хост-машине 5c58fecc2d9c lastops:v2 docker-entrypoint.s… 20 минут назад Up 20 минут 0.0.0.0:4100->4100/tcp objective_spence   -  person Ajay R    schedule 04.08.2019


Ответы (1)


Поскольку ваше угловое приложение node.js работает на порту 4100, вам нужно открыть этот порт, используя сопоставление портов.

docker run -itd -p 4100:4100 myimage:v1

ПРИМЕЧАНИЕ. -p откроет порт контейнера для порта хоста.

Теперь вы можете получить доступ к своему приложению на http://host-ip:4100

Надеюсь это поможет.

person mchawre    schedule 04.08.2019
comment
Я тоже пробовал, не работает. root@master:~/ops-automation-services/ops-automation-services# docker run -itd -p 4100:4100 opstest:v1 f1fb7ec1241adbfffc77d276a66798ac76feed7c8135bac969b2485ee8f290d7 root@master:~/ops-automation-services/ops-automcker ps ИДЕНТИФИКАТОР КОНТЕЙНЕРА IMAGE COMMAND CREATED STATUS NAMES PORTS f1fb7ec1241a opstest:v1 docker-entrypoint.s… 4 секунды назад Up 2 секунды 0.0.0.0:4100->4100/tcp, 8080/tcp pedantic_kare - person Ajay R; 04.08.2019
comment
я не получаю никаких ошибок, просто ничего не загружаю - person Ajay R; 04.08.2019
comment
сделайте это docker exec -it f1fb7ec1241a sh, и вы попадете в оболочку контейнера, а теперь запустите curl localhost:4100 и netstat -anp | grep 4100, чтобы проверить, запущено ли ваше приложение и прослушивает ли он порт. - person mchawre; 04.08.2019
comment
я выполнил приведенную выше команду curl, я получил вывод html # curl localhost:4100 ‹!doctype html› ‹html lang=en› ‹head› ‹meta charset=utf-8› я вставил половину этого. когда я в netstat -anp | grep 4100 я получаю, что netstat не найден - person Ajay R; 04.08.2019
comment
Что происходит, когда вы выполняете curl localhost:4100 или curl host-ip:4100 с хост-компьютера. Можете ли вы вставить вывод сюда. - person mchawre; 04.08.2019
comment
все та же проблема, вошел в контейнер и сделал curl localhost: 4100, я получаю выходной формат html. я сделал чистую статистику -anp | grep 4100 root@5c58fecc2d9c:/usr/src/app# netstat -anp | grep 4100 tcp 0 0 127.0.0.1:4100 0.0.0.0:* LISTEN 7/ng serve --port 4 - person Ajay R; 04.08.2019
comment
Вы пытаетесь свернуться с вашей хост-машины. - person mchawre; 04.08.2019
comment
Нет mchware, у меня есть экземпляр ec2, который является Ubuntu, на нем есть докер. я открываю порт 4100 из докера и нажимаю свой ec2 ip: 4100 @mchawre - person Ajay R; 04.08.2019
comment
Вы проверили, что порт 4100 вашего компьютера с Ubuntu ec2 открыт в группе безопасности. - person mchawre; 04.08.2019
comment
Также, если на Linux-оболочке машины Ubuntu EC2 команда curl работает? - person mchawre; 04.08.2019
comment
команда curl и netstat работают только с док-контейнером. когда я использую docker exec - это ‹идентификатор контейнера›, а затем curl, netstat. я установил сетевые инструменты на экземпляр хоста ec2 и сделал netstat -anp | grep 4100 я получаю вывод ниже root@ip-172-31-83-86:~# netstat -anp | grep 4100 tcp6 0 0 :::4100 :::* СЛУШАЙТЕ 4690/docker-proxy @mchawre - person Ajay R; 04.08.2019
comment
что происходит, когда вы выполняете curl из оболочки ec2? - person mchawre; 04.08.2019
comment
root@ip-172-31-83-86:~# curl localhost:4100 curl: (56) Ошибка получения: сброс соединения партнером - person Ajay R; 04.08.2019
comment
попробуй закрутить с приватным/общедоступным ip машины - person mchawre; 04.08.2019
comment
когда я пробую общедоступный ip: 4100, он переходит к следующему приглашению и ничего не делает. частный IP: 4100 говорит, что в соединении отказано. @mchawre - person Ajay R; 04.08.2019
comment
пройти через этот stackoverflow.com/ вопросов/46778868/ что-то может помочь. - person mchawre; 04.08.2019
comment
наконец, я решил это, но меня беспокоит, используем ли мы --host 0.0.0.0 в файле Docker. это дает мне уязвимость .root@master:~/ops-automation-services/ops-automation-services# docker run -p 8080:4200 opslatest:v1 ПРЕДУПРЕЖДЕНИЕ: сервер для локального тестирования или отладки приложений Angular. Он не был проверен на предмет безопасности. Привязка этого сервера к открытому соединению может привести к компрометации вашего приложения или компьютера. Использование хоста, отличного от того, который был передан флагу --host, может привести к проблемам с подключением через веб-сокет. Возможно, вам придется использовать --disableHostCheck - person Ajay R; 04.08.2019
comment
Я решил это, перейдя по той ссылке, которую вы мне дали. но вызовет ли это проблему безопасности - person Ajay R; 04.08.2019