最近,我一直在构建一个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/