当使用docker compose时,我不能让两个服务相互通信。这个想法是让Node.JS服务与Java/Spring服务对话。
我尝试过使用“链接”,将它们放入相同的“网络”中,然后向http://service_name:port发送请求,然后它返回ERR_NAME_NOT_RESOLVED。
在Node.JS服务中,我尝试使用Axios和http模块,两者都不起作用(ERR_NAME_NOT_RESOLVED)。我也尝试过'localhost',它也不起作用(ERR_CONNECTION_REFUSED)。Spring服务实际上只是一个公开的REST端点(我知道它是工作的,因为我可以直接访问它)。
我也尝试过通过环境变量传递对服务的引用,例如(在docker-compose.yml中)。
environment:
- SERVICE_HOST=serviceB
调用下面的函数时,Node.JS项目内部的环境变量未定义
process.env.SERVICE_HOST
我正在使用Windows和Docker工具箱,但也在Ubuntu VM中尝试过相同的项目。
serviceA:
build: ./serviceA/
ports:
- "8080:8080"
networks:
- my_network
serviceB:
build: ./serviceB/
ports:
- "9003:9003"
networks:
- my_network
networks:
my_network:
driver: bridge
axios.get("http://serviceB:9003/test")
.then(function(res){
console.log(res);
})
我期望Node.JS服务中的console.log语句能够响应ServiceB的rest调用的结果,而不是错误消息。
我刚开始使用docker-compose,所以我希望我在这里遗漏了一些明显的东西,但我在网上找不到任何解决我的问题的东西,也没有在类似的问题中找到解决问题的方法。
编辑添加的整个yaml文件和错误,以便更好地理解。
version: '3'
services:
# Consul
consul:
container_name: consul
image: consul:latest
ports:
- "8500:8500"
- "8300:8300"
hostname: consul
networks:
- front_end
- back_end
# Actor Service
actor_service:
build: ./actor_service/
ports:
- "9001:8080"
depends_on:
- actor_service_db
- consul
networks:
- back_end
actor_service_db:
image: postgres:9.4.5
depends_on:
- consul
networks:
- back_end
environment:
- POSTGRES_DB=actor
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- CONSUL_HTTP_ADDR=https://consul:8500
# Movie Service
movie_service:
build: ./movie_service/
ports:
- "9002:8080"
depends_on:
- movie_service_db
- consul
networks:
- back_end
movie_service_db:
image: postgres:9.4.5
depends_on:
- consul
networks:
- front_end
environment:
- POSTGRES_DB=movie
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- CONSUL_HTTP_ADDR=https://consul:8500
# Movie Aggregate Service
movie_aggregate_service:
container_name: movie_aggregate_service
build:
context: ./movie_aggregate_service/
ports:
- "9003:8080"
depends_on:
- consul
- movie_service
- actor_service
networks:
- front_end
- back_end
hostname: movie_aggregate_service
# Frontend
front_end:
build: ./front_end/
ports:
- "8080:8080"
networks:
- front_end
environment:
- "CONSUL_HOST=consul"
links:
- consul
- movie_aggregate_service
networks:
front_end:
driver: bridge
back_end:
driver: bridge
Browser Console errors and output
转载请注明出处:http://www.66758680.com/article/20230526/1270178.html