从angular2应用程序

时间:2017-05-16 16:15:15

标签: angular docker docker-compose angular2-services

我有一个在Angular2中开发的UI应用程序。我还有一些在Spring Boot中开发的服务。我试图从Angular应用程序调用Spring Boot服务。

下面是我的docker-compose.yml

version: '2'
networks:
  mynet:
services:
  ui:
    image: uiimg
    networks:
      - mynet
    ports:
      - "4200:4200"
  srvc:
    image: scservice
    networks:
      - mynet
    ports:
      - "8080:8080"
  testsrvc:
    image: testsrvc
    networks:
      - mynet
    ports:
      - "8081:8081"      

这就是我调用" srvc"定义的服务的方式。来自棱角分明。

return this.http.get("http://srvc:8080/test").map(result => result.json());

但是我收到了错误     srvc:8080 / test无法加载资源:net :: ERR_NAME_NOT_RESOLVED

但是,我可以通过" testsrvc"中的其他服务拨打http://srvc:8080/test。没有任何问题。

我的理解是,由于UI请求源自浏览器,因此无法知道" srvc"是的,而自从" testsrvc"也可以在容器中运行,它可以链接到" srvc"

那我该如何打电话给#34; srvc"从角度?

P.S:我试过了http://srvc:8080/testhttp://srvc/test 两者都没有。

容器中的角度应用程序已启动并正在运行,我可以从http://localhost:4200

访问它

1 个答案:

答案 0 :(得分:2)

  

容器中的角度应用程序已启动并正在运行,我可以从http://localhost:4200

访问它

这是从主机访问容器的正确方法。

如果你想使用http://srvc:8000,你必须在同一个Docker网络中的Docker容器内。您的docker-compose配置已正确设置,因此您可以从其他一个docker容器中访问该网络名称和端口。

但是从主机上,您无权访问容器的网络名称。映射端口允许您通过localhost访问容器中的服务,如您所见。

您的另一个选择,如果您需要主持人能够将srvc视为正确名称,则可以编辑hosts文件并为其添加条目。只需将srvc映射到127.0.0.1,然后您就可以使用主机中的http://srvc:8000,它将路由到localhost:8000。