Axi*_*iol 14 docker docker-compose angular
我有这个Docker Compose配置,我只需创建一个NodeJS容器并在其中安装Angular CLI.
之后docker-compose up -d,我能够在容器内部使用SSH docker-compose run node bash.ng new效果很好但ng serve似乎不起作用.它正确启动,控制台没有错误.但是,如果我访问localhost(ad我将端口4200映射到80),则无法加载.
我错过了什么吗?
Jua*_*uan 30
在您的Dockerfile中,您缺少Expose行,例如:
EXPOSE 4200
尝试将它放在docker文件中的最后一个RUN命令之前.
此行公开容器本身的端口(在本例中为4200),因此compose的映射有效(80:4200).
Compose就是这样做:将80从主机转发到容器中的4200.但它不知道或不关心4200是否真的被收听.dockerfile中的Expose确保在构建映像时,为将来运行的容器公开此端口,以便ng服务可以监听它.
解析度
因此,要获得所需内容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您将在Ports列中看到:
0.0.0.0:80->4200/tcp 这意味着端口80上的主机已成功转发到端口4200中的容器.
如果您看到类似4200/tcp而不是->部分,则表示没有发布映射或端口.
And*_*riy 19
尝试ng serve使用指定的主机运行(默认设置为'localhost'):
ng serve -H 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
小智 8
使用ng serve --host 0.0.0.0一直对我有用。
之所以如此关键,是因为没有它,角度进程只会在容器内部的 localhost接口上侦听-因此,即使使用docker端口映射,也不会接收来自容器外部的连接。
** Angular Live Development Server正在localhost:3000上侦听
但是,如果添加参数,--host 0.0.0.0则角度进程将在所有接口上侦听,并且docker端口映射将允许来自容器外部的连接到达该接口。
** Angular Live Development Server正在监听0.0.0.0:3000
因此,总而言之:
EXPOSE 4200在Dockerfile线CMD ["ng","serve","--host", "0.0.0.0"]docker rundocker-compose up,这将从docker-compose.yml文件中获取端口映射。| 归档时间: |
|
| 查看次数: |
15089 次 |
| 最近记录: |