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

我有一个在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" 

这就是我如何从angular度调用“srvc”定义的服务。

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

但是我得到错误srvc:8080 /testing失败加载资源:net :: ERR_NAME_NOT_RESOLVED

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

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

那么我应该如何从angular度调用“srvc”呢?

PS:我试过http:// srvc:8080 / test和http:// srvc / test两个都不行。

容器中的angular度应用程序正在运行,我可以从http:// localhost:4200访问它

容器中的angular度应用程序正在运行,我可以从http:// localhost:4200访问它

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

如果你想使用http://srvc:8000 ,你将不得不在同一个Dockernetworking中的Docker容器中。 您的docker-composeconfiguration已经正确设置了这个设置,所以您可以从其他Docker容器中访问该networking名称和端口。

但是从你的主机,你不能访问容器的networking名称。 映射端口允许您通过localhost访问容器中的服务,如您所见。

你的其他选项,如果你需要你的主机能够看到srvc作为一个正确的名字,是编辑你的hosts文件,并添加一个条目。 只需将srvc映射到127.0.0.1 ,然后就可以在你的主机上使用http://srvc:8000了,它将会路由到localhost:8000。