我有一个在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/test和http://srvc/test 两者都没有。
容器中的角度应用程序已启动并正在运行,我可以从http://localhost:4200
访问它答案 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。