为 python 应用程序创建 Dockerfile 以读取 InfluxDB

Create Dockerfile for python application to read InfluxDB

我有一个简单的 python 脚本,用于从安装在本地系统中的 InfluxDB 中的 table 中获取数据。 deviceStatus.py脚本如图

import time
import sys
import influxdb
from influxdb import InfluxDBClient

client = InfluxDBClient(host='localhost', port=8086)
client.switch_database('deviceConfiguration')
results = client.query('SELECT (*) FROM "autogen"."FactoryConfig"')
points = results.get_points()
for point in points:
     print(point['Connection'])

此脚本 运行 没有任何错误,并从 table FactoryConfig 打印 IP 地址(连接)。

现在我想用它创建一个 docker 图像。我写了一个看起来像这样的 Dockerfile

FROM python:3.10.0b2-buster

WORKDIR /usr/src/app

COPY deviceStatus.py .

RUN pip install influxdb

CMD ["python", "./deviceStatus.py"]

此文件编译并创建一个名为 devicestatus 的 docker 图像。现在,当我尝试 运行 带有

的图像时
sudo docker run devicestatus

它在第 8 行向我显示错误并抱怨无法建立新连接:[Errno 111] 连接被拒绝

File "/usr/src/app/./deviceStatus.py", line 8, in <module>
    results= client.query('SELECT (*) FROM "autogen"."FactoryConfig"')

我想这与端口有关。如果这是问题所在,我无法理解如何公开端口。我需要有关此问题的帮助。

提前致谢。

干杯, 标准差

client = InfluxDBClient(host='localhost', port=8086)

在container中运行ning时,localhost表示容器本身,不是宿主机。所以你有2个方案可以选择:

  1. localhost 更改为您主机的 ip。
  2. 当docker运行时,添加--net=host让容器直接使用主机网络。