从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。