【发布时间】:2018-07-18 21:23:28
【问题描述】:
我有两个将通过 ApiGateway 访问的微服务(交易和支付),每个微服务都位于一个 docker 容器内。此外,我已经实现了自己的 SwaggerResourcesProvider,以便从一个点访问两个 Swagger:ApiGateway Swagger,正如您在这个问题中看到的那样:Single Swagger
为了在每个微服务中启用CORS,所有微服务(包括ApiGateway)都有如下代码:
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
如果我使用IDE执行每个微服务,我可以毫无问题地从ApiGateway访问微服务的Swagger,如您所见(ApiGateway在8070端口上执行):
但是,当我使用 docker-compose 执行它们并尝试通过 ApiGateway 访问任何微服务的 Swagger(将内部端口映射到 8070)时,我收到以下错误:
奇怪的是,如果我使用 bash 进入 ApiGateway docker 内部,并执行 curl transactionservice/api/v2/api-docs 然后我会收到相应的 json,所以 docker 的ApiGateway 正在访问其余 docker 的 Swagger,但无法从我的 Web 浏览器访问。
问题:为什么 Swagger 在使用 docker 执行时无法访问其他 Swagger?
【问题讨论】:
-
你应该提供 docker-compose.yml
标签: docker docker-compose swagger api-gateway