Docker微服务间跨服务通信出现403 Forbidden错误如何解决?
Docker微服务部署Proxy调用下游服务403错误解决
问题描述
基于微服务架构开发应用,使用docker-compose统一编排所有服务时出现调用异常,docker-compose配置如下:
version: "3" services: frontend: build: ./Frontend ports: - 4200:4200 links: - proxy proxy: build: ./Proxy ports: - 8080:8080 links: - foods foods: build: ./FoodMicroService container_name: foods links: - database database: image: postgres container_name: database environment: POSTGRES_PASSWORD: pass POSTGRES_DB: wildCats
错误表现
前端调用localhost:8080的Proxy服务可正常响应,但Proxy向foods:3001发起GET请求时返回500错误,Proxy服务报错如下:
Completed 500 Internal Server Error in 353ms (ActiveRecord: 0.0ms | Allocations: 3932) proxy_1 | proxy_1 | proxy_1 | proxy_1 | RestClient::Forbidden (403 Forbidden):
根因与解决方案
该问题由Ruby on Rails框架的主机白名单校验机制触发:Rails 6及以上版本默认开启主机访问白名单,仅允许配置内的主机名访问服务,未在名单内的主机名访问会直接返回403状态码。
修改foods服务的config/environments/development.rb配置文件,添加如下配置即可:
config.hosts << 'foods'
内容的提问来源于stack exchange,提问作者Octavian Custura
相关产品推荐
相关产品推荐

