如何将一个Node.js应用程序连接到一个docker服务的http rest API?

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

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

api运行良好,一切正常。


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

泊坞窗,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> 

或者,如果您有外部DNS服务器知道关于website.dev一些东西,您可以将其添加到docker群集中,如此处所述