我有3个应用。网络,订单和付款,所有这些都在单独的Docker容器中运行
例如在我的订单应用中。我有这条叫付款api的路线
router.post('/order-test', (req, res) => {
let data = "Hello"
// Call the payment api by using Axios
axios.post('http://localhost:3003/payment-test', { data: data } )
.then((response) => {
console.log(response)
})
.catch((error) {
console.log(error)
})
})
然后它将始终返回此错误
Error: connect ECONNREFUSED 127.0.0.1:3003
我的假设是docker容器无法使用localhost相互通信
我的docker-compose文件
version: "3"
services:
web:
build: "./web"
ports:
- "3000:3000"
order:
build: "./order"
ports:
- "3001:3000"
payment:
build: "./payment"
ports:
- "3003:3000"
我的用于订单和付款的docker文件(它们共享相同的代码库)
#-- Build
FROM node:8-alpine
COPY . /src
WORKDIR /src
RUN npm install --production
EXPOSE 3000
CMD npm start
我该如何解决此问题?
答案 0 :(得分:1)
如评论中所述,您应将localhost
替换为服务名称,例如payment
,然后您可以直接指向暴露的端口payment:3000
。我认为在这种情况下,您应该使用expose
关键字而不是ports
。例如
expose:
- 3000
如果您倾向于更改服务名称,并且只想绑定到主机端口,则也可以使用广播地址0.0.0.0:3003
逃脱。这不需要更改您的当前配置。