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

标签 java docker spring-boot microservices

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

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://localhost:8080/testMicroservicio": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)] with root cause

java.net.ConnectException: Connection refused (Connection refused)

但是,如果我在浏览器中执行 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";
    }

这些微服务运行在 Docker 中

非常感谢。

最佳答案

问题是您正在尝试使用 localhost 从一项服务连接到另一项服务。这是行不通的,因为每个容器都有自己的 IP,而 localhost 只会指向请求的调用者。

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

docker network create mynet
docker run --network mynet --name container-1 ...
docker run --network mynet --name container-2 ...

现在 container1 可以使用 http://container-2:8080 与 container2 通信。

关于java - 连接被 Docker 中的两个微服务拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48062134/

相关文章:

java - 执行外部程序

Java - 启动时出现 NullPointerException。 Swing 错误或实现错误?

java - GWT 客户端 - 服务器 SimpleDateFormat 将时区更改为默认值

ruby-on-rails - 在docker-compose up --build之后,Webpacker manifest.json恢复为旧 Assets 引用

java - 在restTemplate之后设置 Spring 过滤器

api - HTTPS 请求仅在 iOS、Ionic 2 上失败

java - 当您不是 Kotlin Multiplatform 项目时,是否有一种干净的方法可以在 Gradle 中声明多平台依赖项?

docker - 在本地缓存 docker 镜像

php - Docker容器无法互相连接

spring - Maven/Spring 未正确运行 jmeter 测试