在您的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通过如上所示的publish命令绑定到主机端口。
每次遇到端口转发问题时,如果打开一个新终端,将另一个终端保留在执行原始终端的位置
run command并运行,则
dockerps您会在“端口”列中看到以下内容:
0.0.0.0:80->4200/tcp这意味着端口80上的主机已成功转发到端口4200中的容器。
如果看到类似
4200/tcp而不是该
->部分的内容,则表示没有发布任何映射或端口。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)