node.js - ECONNREFUSED在Docker容器内部;访问远程API

标签 node.js docker docker-compose axios phpbb

最近,我一直在构建一个nodejs机器人来在phpbb论坛上运行游戏。我的机器人在我的计算机上本地运行(登录,发布,抓取线程等),因此,很自然地,我开始对其进行docker化。

但是,即使从docker容器内部运行登录工作流,当尝试访问论坛的api时,我仍从容器内部接收到ECONNREFUSED错误。上面提到的api没有官方文档,因此很多都是自查。

我正在使用axios v0.19.2 + hardcookie v4.0.0运行节点v14.4.0,以进行请求。我能够从容器内部使用相同的有效负载成功地 curl 端点,因此我怀疑axios / node.js会让我头疼。我尝试查看docker和ECONNREFUSED的其他问题,但大多数与stackoverflow有关的问题都涉及容器间通信,而不是外部api / access的问题。

容器以root用户身份运行,并且我没有设置任何代理或不稳定的网络。

有人有任何建议或建议吗?我的docker-compose几乎没有内容,但是我将其包含在下面以供引用。

version: '3.2'
services:
  bot:
    build: .
    env_file:
      - .env
    ports:
      - '80:80'

任何技巧或理论将不胜感激;我已经打完名单了!

干杯!

最佳答案

我假设您尝试通过容器访问主机。一种简单的方法是使用主机网络而不是容器网络。尝试

version: '3.2'
services:
  network_mode: host
  bot:
    build: .
    env_file:
      - .env

更好的方法可能是将应用程序的其余部分也放入容器中,并在Compose中使用服务发现,例如
version: '3.2'
services:
  bot:
    build: .
    env_file:
      - .env
  webapp:
    ...

然后,您可以通过在上面的示例中连接到主机名“webapp”来访问PHP应用程序。

关于node.js - ECONNREFUSED在Docker容器内部;访问远程API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62187819/

相关文章:

linux - 最轻量级的 Node.js Linux 发行版

javascript - Node.js 和 MongoDB (mongoose) 中的登录表单

docker - Kubernetes Pod重定向到另一个Pod中的相同端口

elasticsearch - 如何从NEST连接到 Elasticsearch

java - 如何在多阶段docker构建中使用maven本地存储库?

node.js - 如何在 Node.js 中将 NTLM 凭据转换为 Kerberos token

node.js - 如果我希望我的 graphql 端点不是 `/graphql` ,如何使用 `GraphqlModule` 配置它?

docker - 如何将docker端口2375从virtualbox转发到主机OS Windows 10

ubuntu - 在 Docker 容器 (Ubuntu) 中运行在 Windows 中创建的 Go 应用程序

Python Docker 远程调试 VS Code