错误:连接ECONNREFUSED 127.0.0.1:3003 Docker容器

时间:2019-04-20 17:09:19

标签: node.js docker

我有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

我该如何解决此问题?

1 个答案:

答案 0 :(得分:1)

如评论中所述,您应将localhost替换为服务名称,例如payment,然后您可以直接指向暴露的端口payment:3000。我认为在这种情况下,您应该使用expose关键字而不是ports。例如

expose:
  - 3000

如果您倾向于更改服务名称,并且只想绑定到主机端口,则也可以使用广播地址0.0.0.0:3003逃脱。这不需要更改您的当前配置。