容器之间的Docker HTTP请求 [英] Docker HTTP-requests between containers
问题描述
我正处于学习如何使用Docker的第一阶段,所以我正在尝试基本的东西。我创建了两个需要通过HTTP请求交换数据的Node Express服务。
I'm at the first stage in learning how to use Docker so I'm trying basic things. I've created two Node Express services that need to exchange data via HTTP-requests.
我的 docker-compose.yml
file
My docker-compose.yml
file
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
使用请求模块向服务2
发出POST请求。
service1
uses the request module to make a POST-request to service 2
.
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
});
此调用的结果是:
{错误:连接ECONNREFUSED 172.18.0.3:10010}
{ Error: connect ECONNREFUSED 172.18.0.3:10010}
使用邮递员我可以测试 service2
在 http:// localhost:10010 / api /
,我可以确认它们实际上可以到达并按预期工作。
Using postman I can test service2
at http://localhost:10010/api/
and I can confirm they actually can be reached and work as expected.
我遗漏了一些东西,但无法理解。这里出了什么问题?
I'm missing something but can't figure it out. What is going wrong here?
推荐答案
查看文档。端口10010是主机端口,但不是容器端口。当您直接访问 service2
容器时,应该使用9000.
See the document. The port 10010 is a host port but not container port. You should use 9000 when you access service2
container directly.
所以只需更改http :// service2:10010 / api /
到http:// service2:9000 / api /
它会起作用。
So just change "http://service2:10010/api/"
to "http://service2:9000/api/"
and it will work.
这篇关于容器之间的Docker HTTP请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!