ECONNREFUSED 在 Docker 容器内;访问远程 API

ECONNREFUSED Inside of Docker Container; Accessing Remote API

最近,我一直在为 phpbb 论坛上的 运行 游戏构建一个 nodejs 机器人。我在我的机器上本地安装了 运行ning 机器人(登录、发帖、scraping 线程等),因此,很自然地,我已经开始 docker 化它。

但是,即使在 运行 从我的 docker 容器内部通过登录工作流时,我在尝试点击论坛的 api。上述 api 没有官方文档,所以其中很多都是自我调查。

我正在 运行ning 节点 v14.4.0 与 axios v0.19.2 + toughcookie v4.0.0 用于请求。我能够从容器内部使用相同的有效载荷成功地卷曲端点,所以我怀疑 axios/node.js 有一些问题让我头疼。我试图查看 docker 和 ECONNREFUSED 的其他问题,但 Whosebug 上的大多数问题都与容器间通信有关,而不是与外部 apis/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 应用。