我的 Node/Express 应用程序通过 http://localhost:8086
或
http://127.0.0.1/8086
连接到 InfluxDB 2.0。
InfluxDB docker container
是由我无法控制的人创建的。
在我的节点应用程序中,我连接到 InfluxDB 进行本地开发,如下所示,
env.js
{
influxDB: {
url: 'http://localhost:8086', // OR http://127.0.0.1/8086
token: 'xxxx==',
org: "xxx",
bucket: "xxx",
}
...
...
}
它连接到InfluxDB以在本地获取/获取数据。效果很好。
现在,我创建了一个 docker 映像和容器,我的节点应用程序可以在其中运行,但无法连接到 Influxdb。
它会抛出错误。
连接ECONNREFUSED 127.0.0.1:8086
docker-compose.yml(用于节点应用程序)
version: '3.8'
services:
my-node-app:
build:
context: ../
dockerfile: Dockerfile
image: "mynodeapp:1.1.0"
container_name: "mynodeapp-container"
ports:
- 5000:5000 <------ port at which my node app works
缺少什么?
influxDB 容器或我的 docker-compose 文件是否需要进行任何更改?
您误解了容器的工作原理。您可以将容器视为它自己的 Linux 系统,因此除非 InfluxDB 位于节点应用程序容器内,否则
localhost
和 127.0.0.1
(也是 localhost)都将无法工作。
通常在像您这样的部署中,您需要连接到单独的 InfluxDB 容器,因此如果
http://mynodeapp-db:8086
是数据库容器的名称,则 url 最终将类似于 mynodeapp-db
。请参阅Docker Hub了解更多详细信息。
如果您在主机上运行数据库并且在容器中运行应用程序,您将需要查看这个答案。
如果您计划使用 Docker 进行开发,则需要阅读有关 Docker 网络的内容。一开始可能会有点令人困惑,但文档很强大。