Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在使用docker-swarm的nginx上遇到问题时,将无法找到服务_Angular_Docker_Nginx_Swarm - Fatal编程技术网

Angular 在使用docker-swarm的nginx上遇到问题时,将无法找到服务

Angular 在使用docker-swarm的nginx上遇到问题时,将无法找到服务,angular,docker,nginx,swarm,Angular,Docker,Nginx,Swarm,我已经用angular编写了一个应用程序,它依赖于restful中间件层,而restful中间件层又与管理数据库数据的业务逻辑层相联系 基础设施如下: Mysql处理持久性 Tomcat 8.5.31上的业务逻辑 Tomcat 8.5.31上的Restful中间件 nginx 1.15.2和angular 5上的前端应用程序 在我的工作站上,一切都运行得很好,但是,在对接所有服务之后,前端将找不到中间件服务。下面是我的docker-compose.yml文件: version: "3.3"

我已经用angular编写了一个应用程序,它依赖于restful中间件层,而restful中间件层又与管理数据库数据的业务逻辑层相联系

基础设施如下:

  • Mysql处理持久性
  • Tomcat 8.5.31上的业务逻辑
  • Tomcat 8.5.31上的Restful中间件
  • nginx 1.15.2和angular 5上的前端应用程序
在我的工作站上,一切都运行得很好,但是,在对接所有服务之后,前端将找不到中间件服务。下面是我的docker-compose.yml文件:

version: "3.3"

services:

  ngxseeker: # Front-end service Angular/nginx
    image: bilorge/seekr:ngxseekr-0.01
    networks:
      - pub # public facing nic
    ports:
      - 80:80

  ckerws: # Restful middle-ware service
    image: bilorge/seekr:seekr-web-0.01
    networks:
      - priv # private nic
      - pub # public facing nic

  seekr-service: # business logic server / data management
    image: bilorge/seekr:seekr-server-0.01
    networks:
      - priv # private nic

  ckerdb: # database / persistence layer
    image: mysql:5.7
    volumes:
      - cker-db-data:/var/lib/mysql # persistent data storage
    environment:
      - MYSQL_ROOT_PASSWORD=&*$#$^##
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - priv # private nic

networks: # nic definition
  pub:
    driver: overlay
  priv:
    driver: overlay

volumes:
    cker-db-data: # data volume definition
值得一提的是,为了使应用程序与work docker及其服务兼容,我将服务名称添加到工作站上的主机文件中。参赛作品如下:

  • 127.0.0.1 ngxseeker
  • 127.0.0.1 ckerws
  • 127.0.0.1 seekr服务
  • 127.0.0.1 ckerdb
这样,当我在工作站上本地运行它时,docker swarm中的所有内容都将解析为相同的服务名称。同样,当我在IDE中运行它或在工作站上单独运行它时,所有这些都会起作用

在swarm上运行之前,我会对主机条目进行注释,以确保它们不会弄脏水域。当我部署堆栈(单节点群)时,我会等待并确保所有服务都已启动并准备好工作

然后,我将浏览器指向127.0.0.1,并获得我的应用程序的登录页,该登录页向我致意。我提供了凭据,但立即失败。开发人员工具表明post请求已发出,但从未返回

我已核实以下情况: -数据库中有数据 -业务逻辑服务器能够与数据库通信 -中间件服务器能够解析业务逻辑层 -前端能够解析中间件层

在最后一点上,我在ngix上做了一个反向代理条目,以访问运行中间件层的Tomcat的登录页,并成功地访问了它。顺便说一句,在启动时,如果nginx没有找到反向代理条目,它将不会启动

在一次故障排除会话中,我在Virtualbox中创建了一个具有桥接网络的Ubuntu VM(最新版本),因为我希望VM从我的路由器获得ip。然后我部署了我的堆栈,单节点swarm,除了我在工作站上运行的前端。因为swarm是外部托管的,所以我在ckerws服务上暴露了8080端口。我还为vm和服务添加了一个主机条目:

  • 192.168.1.62 ckerws
  • 192.168.1.62波基
我启动了浏览器,并像往常一样将其指向127.0.0.1登录页加载,然而,这次当我提供凭证时,它工作了!如果我把所有的服务都集中到一个集群中,那么它就会崩溃


我被难住了,不知道发生了什么事。。我有一种感觉,这必须要解决我们的服务范围问题,然而,我在这方面有点不知所措。

您是否尝试将它们放在同一个网络上,这对我来说似乎是一个网络问题。Nginx找不到它们(例如,如果您将其用作负载平衡器),您在这里没有被收取费用;如果你想让别人帮助你,请用你请求帮助的语言为你的服务提供描述性名称。我不会去猜测什么是“ckerws”,或者它应该做什么。坎坦卡鲁布尔穆斯如果你熟悉这个项目,这个服务的名字很友好。例如,secker(seeker)ws是web服务的缩写。这是术语,实际上与引擎无关,因为它通过ID引用资源,这是一个相当长的散列。调用服务中间件restfull web服务似乎是浪费时间的。为了清晰起见,这里是服务定义。ngxseeker:nginx上的Angular前端ckerws:seeker restful web服务-中间件seekr服务:业务逻辑服务,也就是resftul ckerdb:Database persistance layerYamaçKurtuluş谢谢你的建议,我已经尝试过了,它仍然无法解决中间件服务。好的,我找到了答案。问题的根源在于nginx中的路由。当调用进入nginx时,没有逻辑构建调用中间件服务。为了修复它,我必须在nginx中创建一个规则,该规则将匹配传入调用,并对web服务执行反向代理操作。处理分布式应用程序时要考虑的其他因素。。确保在前端应用程序上编写正确的端点名称,这样可以正确构建这些URL!我计划很快制作一个视频,我会把链接放在这里。