我有两个微服务(交易和支付),将通过ApiGateway访问,每个微服务都在一个docker容器中。此外,我已经实现了自己的SwaggerResourcesProvider,以便从单个点访问两个Swagger:ApiGateway Swagger,如您可以在此问题中看到的:Single Swagger
为了在每个微服务中启用CORS,它们(包括ApiGateway)都具有以下代码:
如果我使用IDE执行每个微服务,我可以从ApiGateway无问题地访问微服务的Swagger,如您在此处所见(ApiGateway在8070端口上执行): 然而,当我使用docker-compose执行它们,并且尝试通过ApiGateway访问任何微服务的Swagger(将内部端口映射到8070),我收到以下错误:
@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,因此ApiGateway的docker正在访问其他docker的Swagger,但无法从我的Web浏览器访问。
问题:为什么在使用docker时Swagger无法访问其他Swaggers?