我有一个脚本,它使用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')
谢谢你的帮助
除了代码在docker容器外部而不是内部工作之外,您没有提供太多相关信息。但是,很可能在容器内部无法识别数据库的主机名。尝试为您的“主机”使用IP地址。或者,如果不可能,请使用安装在容器内部的修改后的/etc/hosts
相关问题 更多 >
编程相关推荐