Ваш ответ немного легок в деталях. Не могли бы вы объяснить, что это делает, и почему это решило бы проблему?

я есть этоКонфигурация Docker Compose где я просто создаю контейнер NodeJS и устанавливаю Angular CLI внутри.

Послеdocker-compose up -dЯ могу SSH внутри контейнера сdocker-compose run node bash. ng new работает отлично ноng serve не похоже на работу. Он запущен правильно, без ошибок в консоли. Но если я посещуlocalhost (Объявление я сопоставил порт 4200 до 80), ничего не загружается.

Я что-то пропустил?

 Juan16 окт. 2017 г., 23:29
Можете ли вы опубликовать Dockerfile в своей папке ./.docker/node/?
 Juan16 окт. 2017 г., 23:29
Неважно, видел это на github.

Ответы на вопрос(5)

ng serve -H 0.0.0.0 

айла)

"defaults": {
    "styleExt": "scss",
    "component": {},
    "poll": 1000
  }
 Adam23 февр. 2018 г., 00:48
Ваш ответ немного легок в деталях. Не могли бы вы объяснить, что это делает, и почему это решило бы проблему?
Решение Вопроса

разоблачать строка, такая как:

EXPOSE 4200

Попробуйте поместить его перед последней командой RUN в файле Docker.

Эта строка отображает порт в самом контейнере (в данном случае 4200), поэтому сопоставление из compose works (80: 4200).

Compose как раз делает это: пересылает 80 с хоста на 4200 в контейнере. Но это не знает или не волнует, действительно ли 4200 слушают. Expose в файле docker гарантирует, что при создании образа будет открыт этот порт для будущих работающих контейнеров, чтобы ваша нг служба могла его слушать.

разрешение

Таким образом, чтобы получить то, что вы хотите сdocker-compose runиспользоватьpublish опубликовать порты. Какrun не использует сопоставления из вашегоdocker-compose.ymlигнорирует их. Так что используйте это так:

docker-compose run --publish 80:4200 node bash

Затем создайте угловое приложение и запустите его, как вы это делали.

Тестовый пример для будущего использования

cd tmp (или любая доступная для записи папка)

ng new myProject

cd myProject

ng serve --host 0.0.0.0 (--host 0.0.0.0 для прослушивания всех интерфейсов из контейнера)

Затем в вашем браузере перейдите кlocalhost и вы должны увидеть угловую страницу приветствия в качестве порта4200 опубликован и привязан к порту хоста80 через команду публикации, как я показал выше.

Каждый раз, когда у вас возникают проблемы с переадресацией портов, если вы открываете новый терминал, сохраняя другой терминал, на котором вы выполнили оригиналrun command и бегиdocker ps вы увидите это в колонке портов:

0.0.0.0:80->4200/tcp Это означает, что ваш хост на порту 80 успешно перенаправляет ваш контейнер на порт 4200.

Если вы видите что-то вроде4200/tcp а не-> часть, это означает, что нет отображений или опубликованных портов.

 Juan23 окт. 2017 г., 18:23
Я рад, что это помогло!
 Axiol21 окт. 2017 г., 23:06
Ну, это то, что я называю ответом! Я понимаю больше о переадресации портов Docker с этим, чем с документом ... Большое спасибо :)
 Axiol17 окт. 2017 г., 12:55
О, я не знал, что вам пришлось вручную выставлять порты, спасибо. Но все равно это не работает. Как вы можете видеть здесь, порт открытgithub.com/Axiol/Docker-Angular-CLI/blob/master/.docker/node/... Но все равно не загружается
 Juan21 окт. 2017 г., 06:11
@Axiol Я добавил обновление в свой ответ со всеми шагами, чтобы получить то, что вы хотите!
 Lav28 дек. 2017 г., 02:34
Я столкнулся с той же проблемой, пробовал все выше, это не помогает мне .... (i) я правильно использую EXPOSE чуть выше CMD ["ng", "serve", "- H0.0.0.0"], (ii) я вижу 0.0.0.0:80->4200/tcp .... когда я захожу внутрь контейнера и вижу процесс с помощью ps -ai не вижу запущенного npm .... очень плохо знаком с npm & docker и то и другое, pls help

ng serve --host 0.0.0.0 всегда работал на меня.

Причина, по которой это имеет решающее значение, заключается в том, что без него угловой процесс прослушивает только интерфейс localhostвнутри контейнера - поэтому даже при сопоставлении портов док-станции соединения извне контейнера не принимаются.

** Angular Live Development Server прослушивает локальный хост: 3000

Но если вы добавите параметр--host 0.0.0.0 тогда угловой процесс будет прослушивать все интерфейсы, а сопоставление портов докера позволит подключаться к нему извне контейнера.

** Сервер Angular Live Development прослушивает 0.0.0.0:3000

Итак, в итоге:

выне нуженEXPOSE 4200 строка в Dockerfileвыделать нужно сопоставление портов в файле docker-compose.ymlвыделать нужна строка CMD в Dockerfile, и она должна включать параметр host, напримерCMD ["ng","serve","--host", "0.0.0.0"]выне нужно использоватьdocker runвыМожно использованиеdocker-compose up, который выберет сопоставления портов из файла docker-compose.yml.

CMD ["npm start"] or CMD ["ng serve"] в конце dockerfile это точка входа для контейнера, которую docker выполняет при запуске контейнера, и только после этого запускается сервер npm.

ng serve -H 0.0.0.0 --port <yourportnumber> заставит ngserve работать наlocalhost:<yourportnumber>после того, как вы можете привязать номер порта контейнера к вашему локальному порту

 Axiol20 окт. 2017 г., 15:19
Как уже упоминалось, я вручную подключаюсь к контейнеру для запускаng serve

попробуй бежатьng serve с указанным хостом (по умолчанию установлен localhost):

ng serve -H 0.0.0.0

ОБНОВИТЬ Обратите внимание, что в настоящее время (@ angular / cli @ 7) опция--host:

ng serve --host 0.0.0.0
 Axiol17 окт. 2017 г., 12:58
Он до сих пор не загружается, к сожалению

Ваш ответ на вопрос