Мне удалось запустить webpack-dev-server в контейнере Docker.
docker run -p 9000:9000 --other-arguments-such-as-volume-mounting-etc my-image
Webpack-dev-server запускается внутри контейнера, и посещение браузера выглядитнапример:
browser --[visits]--> host:9000 --[map]--> container:9000
(webpack-dev-server is listening here)
Затем webpack-dev-server отвечает на страницу сокетом, настроенным для подключения к hostname:9000
для сообщений об обновлениях, и, наконец, браузер отображает страницу.Отлично!
Однако, если я запускаю контейнер докера с другим отображением портов, все идет не так.
Предположим, что я запускаю контейнер с -p 9001:9000
и посещения браузера localhost:9001
.
browser --[visits]--> host:9001 --[map]--> container:9000
^
note the difference here
Та же страница будет доставляться из контейнера и отображаться в браузере.НО, поскольку страница точно такая же, код сокета на странице будет пытаться подключиться к hostname:9000
, где номер порта 9000 настроен внутри контейнера как конфигурация webpack-dev-server, а затем неизбежно завершится неудачей.
socket code ----> host:9000 --X--> no where
Так как этот сбой происходит только при несовпадении сопоставления портов, я могу избежать этого, ограничив сопоставление портов.Но это очень строгое ограничение, с которым я действительно не хочу мириться.Я могу захотеть запускать два экземпляра этого образа одновременно и время от времени, и это ограничение может привести к конфликту портов, так как номер порта, отображаемый через contaienr, фиксируется во время сборки.
Есть ли способсправиться с этим?
Я собираюсь предоставить диапазон портов во время сборки.Это имеет смысл?