从angular2应用程序调用在Docker容器中运行的服务

Ath*_*mas 0 docker docker-compose angular2-services angular

我有一个用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"      
Run Code Online (Sandbox Code Playgroud)

这就是我从angular调用“ srvc”定义的服务的方式。

return this.http.get("http://srvc:8080/test").map(result => result.json());
Run Code Online (Sandbox Code Playgroud)

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

但是,我可以从“ testsrvc”中的另一个服务调用http:// srvc:8080 / test,而不会出现任何问题。

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

因此,我应该如何从角度调用“ srvc”?

PS:我尝试了http:// srvc:8080 / testhttp:// srvc / test 都不起作用。

容器中的角度应用程序已启动并正在运行,我能够从http:// localhost:4200访问它

Der*_*ley 5

容器中的角度应用程序已启动并正在运行,我能够从http:// localhost:4200访问它

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

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

但是您无法从主机访问容器的网络名称。localhost如您所见,映射端口可以使您通过访问容器中的服务。

如果您需要主机能够以srvc适当的名称显示,则您的另一种选择是编辑hosts文件并为此添加一个条目。只需映射srvc127.0.0.1,然后您就可以http://srvc:8000在主机上使用它,并且它将路由到localhost:8000。