我正处于学习如何使用Docker的第一阶段,所以我正在尝试基本的东西.我创建了两个需要通过HTTP请求交换数据的Node Express服务.
我的docker-compose.yml文件
networks:
isolation-network:
driver: bridge
services:
service1-nodejs:
build:
context: ./service1/
dockerfile: .docker/node.dockerfile
ports:
- "10000:9000"
- "10001:5858"
env_file: ./service1/.docker/env/app.${APP_ENV}.env
networks:
- isolation-network
service2-nodejs:
build:
context: ./service2/
dockerfile: .docker/node.dockerfile
ports:
- "10010:9000"
- "10011:5858"
env_file: ./service2/.docker/env/app.${APP_ENV}.env
networks:
- isolation-network
service1使用request module向服务2发出POST请求.
request({ url: "http://service2:10010/api/",method: "POST",headers: { "Content-Type": "application/json" },json: true,body: { ... },time: true
},function (err,res,body) {
if (!err && res.statusCode == 200) {
// success
}
// Failed
});
此调用的结果是:
{ Error: connect ECONNREFUSED 172.18.0.3:10010}
使用邮递员我可以在http:// localhost:10010 / api /上测试service2,我可以确认它们实际上可以到达并按预期工作.
我错过了什么,但无法弄清楚.这里出了什么问题?
最佳答案
See the document.端口10010是主机端口,但不是容器端口.直接访问service2容器时应使用9000.
所以只需将“http:// service2:10010 / api /”更改为“http:// service2:9000 / api /”即可.