与 Docker 中的两个微服务的连接被拒绝

Alb*_*rto 1 java docker spring-boot microservices

我有两个微服务,我希望一个使用另一个,但我遇到了这个错误:

servlet [dispatcherServlet] 的 Servlet.service() 在路径为 [] 的上下文中抛出异常 [请求处理失败;嵌套异常是 org.springframework.web.client.ResourceAccessException: I/O error on GET request for " http://localhost:8080/testMicroservicio ": 连接被拒绝(连接被拒绝);嵌套异常是 java.net.ConnectException:连接被拒绝(连接被拒绝)] 与根本原因

java.net.ConnectException:连接被拒绝(连接被拒绝)

但是,如果我在浏览器中执行 url,它可以完美运行,但是如果一个微服务想要访问另一个微服务,我就会犯这个错误。

有人知道为什么吗?

我正在消费:RestTemplate

我放了一些代码:

@RestController
public class MicroServiceController {


    private final AddressService service;

    private static final String URL_API_INFO = "http://localhost:8080/testMicroservicio";

    private RestTemplate restTemplate = new RestTemplate();

    private final static Logger log = Logger.getLogger("com.bernanetwork.web.controller.MicroServiceController");

    @Autowired
    public MicroServiceController(AddressService service) {
        this.service = service;
    }

    @RequestMapping(value = "/micro-service-test")
    public String consumidor() throws Exception {

        log.info("----------------------------------------------------------------------------------------");
        log.info("-------------------------Iniciando método consumidor------------------------------------");
        log.info("----------------------------------------------------------------------------------------");

        ResponseEntity <PruebasMicroservicio[]> response = restTemplate.getForObject(URL_API_INFO, PruebasMicroservicio[].class);

        Arrays.asList(response.getBody()).forEach(info -> log.info("---"+info));

        return "ok";
    }
Run Code Online (Sandbox Code Playgroud)

这些微服务在 Docker 中运行

非常感谢。

yam*_*enk 5

问题是您正在尝试使用localhost. 这不会起作用,因为每个容器都有自己的 IP,而 localhost 只会指向请求的调用者。

连接容器的标准 Docker 方式是将它们连接到 Docker 网络。

docker network create mynet
docker run --network mynet --name container-1 ...
docker run --network mynet --name container-2 ...
Run Code Online (Sandbox Code Playgroud)

现在 container1 可以使用http://container-2:8080.