现在如何运作:
Microservice X使用静态ip向Microservice Y发出REST API请求
http://{ip-address}:{port}/doSomething
问题:
问题是我不能保证静态ip。 我不想通过使用docker主机名来解决这个问题:
http://hostname:{port}/doSomething
我尝试通过在docker-compose中创建一个使用过的已定义网络来实现这一目标:
#part of docker-compose file
streamapp:
hostname: twitterstreamapp
image: twitterstreamapp
container_name: twitterstreamapp
restart: always
ports:
- '8090:8080'
build:
context: ./TwitterStream
dockerfile: Dockerfile
storeapp:
hostname: twitterstoreapp
image: twitterstoreapp
container_name: twitterstoreapp
restart: always
ports:
- '8095:8080'
build:
context: ./TwitterStore
dockerfile: Dockerfile
depends_on:
- 'mysql-db'
networks:
- backend
volumes:
MyDataVolume:
networks:
backend:
driver: bridge
我可以从容器X ping容器Y.但不是Curl例如。 我该如何解决这个问题,或者这不是达到我想要的最佳方式。
答案 0 :(得分:6)
解决方案非常简单,您可以使用服务名称,而不是使用IP或主机名。
在您的示例中,在streamapp
服务中,您可以使用http://storeapp:8080
访问另一个。
类似地,在storeapp
服务中,您可以通过http://streamapp:8080
访问另一个。
请注意,您必须使用内部端口,而不是导出端口。
当您从其他计算机(即从Internet)访问服务时,这不适用。在这种情况下,您必须使用表格http://{IP_OF_THE_MACHINE}:8090