我有两个将通过 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,所以 ApiGateway 的 docker 正在访问其余部分的 Swagger码头工人,但它无法从我的网络浏览器访问。
问题:为什么 Swagger 在使用 docker 执行时无法访问其他 Swagger?