node.js - 如何从 Docker 服务将 Node.js 应用程序连接到 http Rest API?

标签 node.js rest docker docker-compose axios

Node.js 中的 Web 应用程序通过 axios 连接到 api。

import axios from 'axios'

export function fetchList() {
  return axios.get('https://api.website.dev/v1/posts')
}

API 运行良好,一切都很好。

<小时/>

现在,我使用 docker-compose 在容器内运行完全相同的 Nodejs Web 应用程序。

docker-compose.yml:

版本:“3.1”

服务:

  nodejs:
    image: node:alpine
    working_dir: /home/app
    restart: always
    ports:
      - "8000:8080"
    volumes:
      - ../nodejs:/home/app
    command: ["npm", "start"]

axios 调用 Rest API 返回错误:

error { Error: getaddrinfo EAI_AGAIN api.domain.dev:443
  at Object.exports._errnoException (util.js:1024:11)
  at errnoException (dns.js:55:15)
  at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
code: 'EAI_AGAIN',
errno: 'EAI_AGAIN',
syscall: 'getaddrinfo',
hostname: 'api.domain.dev',
host: 'api.domain.dev',
port: 443,
config:
 { adapter
…

如何让nodejs应用程序从docker容器连接到api?

最佳答案

docker集群内的DNS服务器不知道任何关于主机api.website.dev

您可以显式设置该主机的IP地址。尝试将 extra_hosts 添加到 docker-compose.yml

中的服务定义中
nodejs:
    image: node:alpine
    working_dir: /home/app
    restart: always
    ports:
      - "8000:8080"
    volumes:
      - ../nodejs:/home/app
    command: ["npm", "start"]
    extra_hosts:
      - "api.website.dev:<IP_ADDRESS>

或者,如果您有了解 website.dev 的外部 DNS 服务器,您可以将其添加到 docker 集群,如 here 中所述。

关于node.js - 如何从 Docker 服务将 Node.js 应用程序连接到 http Rest API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45490268/

相关文章:

node.js - 我应该为我的 api 和套接字服务器使用单独的负载均衡器,还是带有规则的负载均衡器? (G云)

python-2.7 - 将一个 docker 容器的 stdout 附加到另一个 docker 容器的 stdin

docker - 将主机环境变量传递给 dockerfile

node.js - 了解异步每个

postgresql - node.js/postgres ...异步问题?

Javascript GTK 绑定(bind)

java - 未找到媒体类型 = 应用程序/json 的 MessageBodyWriter

javascript - 如何将 Firebase Cloud Functions 与 promises 和 forEach 一起使用?

python - Flask Restful API url

docker - 试图了解 Kubernetes 工作节点和 Pod 与 Docker 的比较 "Service"