我设法在docker容器中运行webpack-dev-server。
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
以获取更新消息,最后,浏览器显示该页面。完美!
但是,如果我使用不同的端口映射运行docker容器,则会出错。
假设我使用-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
由于此故障仅在端口映射不匹配时发生,我可以通过限制端口映射来避免这种情况。但这是一个非常严格的约束,我并不真正想要站在一起。我可能希望每隔一段时间同时运行该映像的两个实例,这种约束会导致端口冲突,因为内容暴露的端口号在构建时是固定的。
有没有办法解决这个问题?
我考虑在构建时公开一系列端口。这有意义吗?