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/