Python Docker 容器将无法启动收到此错误:ConnectionRefusedError:[Errno 111] 连接被拒绝

我有一个使用 Docker、Python、MySQL、MySQL Connector 和 Grafana 的项目。当我不使用 docker 时,我可以运行 Python 程序并将数据发送到 MySQL。我能够创建容器。 Grafana 和 MySQL 容器保持运行,但 Python 容器由于连接错误而关闭。我的猜测是因为 Python 在 MySQL 之前启动,但我不确定我将如何解决这个问题或测试我的理论。

我的项目由四个文件组成。它们是 Docker-Compose.yml、Dockerfile、requirements.txt 和 startTemp.py。下面是我的代码 提前致谢。

Dockerfile:

FROM python:3.9-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python","startTemp.py"]

需求.txt:

mysql-connector-python==8.0.25

Docker-Compose.yml

version:"3"
services:
    grafana:
        image:grafana/grafana
        container_name: grafana
        restart: always
        ports:
            - 3000:3000
        networks:
            - temperature_network
        volumes:
            - grafana_data:/var/lib/grafana
        depends_on:
            - mysql

    mysql:
        image: mysql:latest
        container_name: mysql
        restart: always
    
        networks: 
            - temperature_network
        volumes:
            - mysql_data:/var/lib/mysql
        environment:
        
            XXXXXXXXXXXXXXXXXXXXXXXXX
        depends_on:
            - python

    python:
        build: .
        container_name: python
        networks:
            - temperature_network

networks:
    temperature_network:
volumes:
    grafana_data:
    mysql_data:

startTemp.py:

from __future__ import print_function

import mysql.connector
from mysql.connector import errorcode

import random   
import time 
from time import localtime,strftime




DB_NAME = 'temperature'

TABLES = {}

TABLES['chamber_probe_green'] = (
    "CREATE TABLE `chamber_probe_green`("
    "   `id` INT unsigned NOT NULL AUTO_INCREMENT,"
    "   `time` TIME NOT NULL,"
    "   `temp` FLOAT NOT NULL,"
    "   PRIMARY KEY (ID)"
    ") ENGINE=InnoDB")



TABLES['chamber_probe_blue'] = (
    "CREATE TABLE `chamber_probe_blue`("
    "   `id` INT unsigned NOT NULL AUTO_INCREMENT,"
    "   PRIMARY KEY (ID)"
    ") ENGINE=InnoDB")



TABLES['food_probe_yellow'] = (
    "CREATE TABLE `food_probe_yellow`("
    "   `id` INT unsigned NOT NULL AUTO_INCREMENT,"
    "   PRIMARY KEY (ID)"
    ") ENGINE=InnoDB")



TABLES['food_probe_red'] = (
    "CREATE TABLE `food_probe_red`("
    "   `id` INT unsigned NOT NULL AUTO_INCREMENT,"
    "   PRIMARY KEY (ID)"
    ") ENGINE=InnoDB")


clock = strftime("%I:%M",localtime())

data = "{:.2f}".format(random.random()*100)


cnx = mysql.connector.connect(XXXXXXXXXXXXXXXXXXXXXXX)
cursor = cnx.cursor()

def create_database(cursor):
    try:
        cursor.execute(
            "CREATE DATABASE {} DEFAULT CHARactER SET 
'utf8'".format(DB_NAME))
    except mysql.connector.Error as err:
        print("Failed creating database: {}".format(err))
        exit(1)
try:
    cursor.execute("USE {}".format(DB_NAME))
except mysql.connector.Error as err:
    print("Database {} does not exist.".format(DB_NAME))
    if err.errno == errorcode.ER_BAD_DB_ERROR:
        create_database(cursor)
        print("Database {} created successfully.".format(DB_NAME))
        cnx.database = DB_NAME
    else:
        print(err)
        exit(1)

for table_name in TABLES:
    table_description = TABLES[table_name]
    try:
        print("Creating table {}: ".format(table_name),end=' ')
        cursor.execute(table_description)
    except mysql.connector.Error as err:
        if err.errno == errorcode.ER_TABLE_EXISTS_ERROR:
            print("Already exists.")
        else:
            print(err.msg)
    else:
        print("OK")




def insertData():

    while(True):

        AddDataBlue = ("INSERT INTO chamber_probe_blue "
                        "(time,temp)"
                        "VALUES (%s,%s)") 

        AddDataGreen = ("INSERT INTO chamber_probe_green "
                        "(time,%s)") 

        AddDataYellow = ("INSERT INTO food_probe_yellow "
                        "(time,%s)") 

        AddDataRed = ("INSERT INTO chamber_probe_blue "
                        "(time,%s)") 
    
        dataBlue = (clock,data)

        dataGreen = (clock,data)

        dataYellow = (clock,data)

        dataRed = (clock,data)
        print("Adding Blue Data")
        cursor.execute(AddDataBlue,dataBlue)
        print("Adding Green Data")
        cursor.execute(AddDataGreen,dataGreen)
        print("Adding Yellow Data")
        cursor.execute(AddDataYellow,dataYellow)
        print("Adding Red ddata")
        cursor.execute(AddDataRed,dataRed)

        cnx.commit()

        time.sleep(2)

insertData()

cursor.close()
cnx.close()

Docker 日志中列出的错误:

python | File "/usr/local/lib/python3.9/site-packages/mysql/connector/network.py",line 574,in open_connection

python | self.sock.connect(sockaddr)

python | ConnectionRefusedError: [Errno 111] Connection refused
itxfdnaaa 回答:Python Docker 容器将无法启动收到此错误:ConnectionRefusedError:[Errno 111] 连接被拒绝

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1348.html

大家都在问