Docker容器中的Python MySQL连接丢失

2024-05-14 21:36:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它使用Python查询四个单独的MySQL数据库(托管在别处)(使用mysql-connector==2.2.9)。我在本地编写并测试了这个脚本,它在我的MacBook上运行没有问题。然后,我使用ubuntu:18.04作为基本映像创建了一个Docker映像,并希望在容器中运行此脚本。在本地启动容器时,它会查询第一个数据库而不会出现问题,但在第二个数据库上出现以下错误:

mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during query

发生在容器内部。相关代码snippit:

for i, host in enumerate(hosts):
    cnx = mysql.connector.connect(user=os.environ["DBUSER"],
                                  password=os.environ["DBPASSWORD"],
                                  host=host,
                                  database=XXXXX
                                  )
    cursor = cnx.cursor()
    cursor.execute(query)
    df = pd.DataFrame(cursor.fetchall(), columns=columns)

因为相同的代码在容器外运行时没有问题,所以我认为问题不在服务器上。此外,服务器上的大多数超时参数似乎都正常。查询show session variables like '%timeout';返回以下内容:

('delayed_insert_timeout', '300')
('have_statement_timeout', 'YES')
('innodb_flush_log_at_timeout', '1')
('innodb_lock_wait_timeout', '50')
('innodb_rollback_on_timeout', 'OFF')
('interactive_timeout', '7200')
('lock_wait_timeout', '31536000')
('net_read_timeout', '600')
('net_write_timeout', '600')
('rpl_stop_slave_timeout', '31536000')
('slave_net_timeout', '3600')
('thread_pool_idle_timeout', '60')
('wait_timeout', '7200')

谢谢你的帮助


Tags: 代码脚本数据库hostconnectornetmysqltimeout
1条回答
网友
1楼 · 发布于 2024-05-14 21:36:13

除了代码在docker容器外部而不是内部工作之外,您没有提供太多相关信息。但是,很可能在容器内部无法识别数据库的主机名。尝试为您的“主机”使用IP地址。或者,如果不可能,请使用安装在容器内部的修改后的/etc/hosts

相关问题 更多 >

    热门问题