node.js - ECONNREFUSED 在 Docker 容器内部;访问远程 API
问题描述
最近,我一直在构建一个 nodejs 机器人来在 phpbb 论坛上运行游戏。我让机器人在我的机器上本地运行(登录、发布、抓取线程等),所以很自然地,我已经开始对它进行 docker 化。
但是,即使从我的 docker 容器内部运行登录工作流,我ECONNREFUSED
在尝试访问论坛的 api 时也会从容器内部收到错误。上述api没有官方文档,所以很多都是自我调查。
我正在使用 axios v0.19.2 + toughcookie v4.0.0 运行节点 v14.4.0 来处理请求。我能够从容器内部成功地使用相同的有效负载卷曲端点,所以我怀疑 axios/node.js 有什么东西让我头疼。我试图查看 docker 和 ECONNREFUSED 的其他问题,但在 stackoverflow 上的大多数问题都与容器间通信有关,而不是与外部 apis/访问有关的问题。
该容器以 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 应用程序。
推荐阅读
- google-cloud-platform - 模型训练期间浏览器断开连接
- java - 无法使用 wagon maven FTPS 传输中型大文件
- react-native - 是否可以在 MapView 之外重用 react-native-maps 标记?
- excel - 在 Excel VBA 中通过 ActiveCell 突出显示行和列
- webpack - 每个 html 文件都包含它自己的 js 脚本
- java - 确认后一次又一次收到来自Google Pub / Sub订阅的消息[Heisenbug]
- autodesk-forge - Autodesk Forge - Revit New Dimension 添加但不可见
- vue.js - vue-meta 不在页面源代码中显示元标记
- r - 如何在 R 中使用陈述的偏好数据从长到宽
- youtube-api - 从我的 youtube 频道检索我的评论历史记录