为 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个方案可以选择:
- 将
localhost
更改为您主机的 ip。
- 当docker运行时,添加
--net=host
让容器直接使用主机网络。
我有一个简单的 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个方案可以选择:
- 将
localhost
更改为您主机的 ip。 - 当docker运行时,添加
--net=host
让容器直接使用主机网络。