作者:手机用户2502873837 | 来源:互联网 | 2022-12-10 11:34
我有两个SpringBoot
微服务M1
(端口2002)和M2
(端口2004)
M1
并且M2
如果我使用eclipse
(作为Java Project或SpringBoot Project 运行)运行它们,则通信成功。
但是,我想使用进行交流Docker container
。
因此,我使用命令为Microservices
(M1
和M2
)构建图像:
docker build -f Dockerfile -t image_name .
并使用以下命令运行图像:
docker run -p 2004:2004 image_name
注意:我正在按照上述定义从docker暴露相同的端口
但是M1和M2无法通信。我在用RestTemplate
RestTemplate restTemplate = new RestTemplate();
ResponseEntity isUp = restTemplate.getForEntity("http://localhost:2002/apis/test",Boolean.class);
我低于异常:
I/O error on GET request for \"http://localhost:2002/apis/test\": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
但是,如果我使用机器的IP调用另一个微服务,则表示通信成功
ResponseEntity isUp = restTemplate.getForEntity("http://XX.XX.XX.XXX:2002/apis/test",Boolean.class);
有人可以告诉我是否正在写(使用IP地址),还是有另一种好的方法可以使用Docker从另一个服务调用一个微服务?
1> chris..:
尝试与其他容器通信将无法使用localhost
。
您应该创建一个自定义的桥接网络,这将允许您按名称引用容器。如果您只是在内部讲话,则无需发布端口。
# create network
docker network create -d bridge mynet
# container 1
docker container run --network mynet --name container1 -d image_name
# container 2
docker container run --network mynet --name container2 -d some_other_image_name
然后,代码片段中的IP可以替换为另一个容器的名称
RestTemplate restTemplate = new RestTemplate();
ResponseEntity isUp = restTemplate.getForEntity("http://container2:2002/apis/test",Boolean.class)