【问题标题】:Create Dockerfile for python application to read InfluxDB [duplicate]为python应用程序创建Dockerfile以读取InfluxDB [重复]
【发布时间】:2021-09-01 01:54:11
【问题描述】:

我有一个简单的 python 脚本来从安装在本地系统中的 InfluxDB 中的表中获取数据。 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'])

此脚本运行没有任何错误,并从 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] Connection denied

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

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

提前致谢。

干杯, 标清

【问题讨论】:

    标签: docker containers influxdb influxdb-python


    【解决方案1】:

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

    在容器中运行时,localhost 表示容器本身,而不是主机。因此,您有 2 种解决方案可供选择:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    相关资源
    最近更新 更多