gapinyc@DESKTOP-9QS7RL5:~/superset-prod$ docker-compose build --no-cache superset
docker-compose down -v # 删除旧卷(谨慎!如有数据请备份)
docker-compose up -d
[+] Building 78.2s (12/12) FINISHED
=> [internal] load local bake definitions 0.0s
=> => reading from stdin 558B 0.0s
=> [internal] load build definition from Dockerfile.superset 0.0s
=> => transferring dockerfile: 1.32kB 0.0s
=> [internal] load metadata for docker.io/apache/superset:latest 0.2s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [1/6] FROM docker.io/apache/superset:latest@sha256:09735adaae3945c5a8fabbeca31a7954c8c74de195702ba61622aee8604d5c55 0.0s
=> => resolve docker.io/apache/superset:latest@sha256:09735adaae3945c5a8fabbeca31a7954c8c74de195702ba61622aee8604d5c55 0.0s
=> [2/6] RUN apt-get update && apt-get install -y --no-install-recommends build-essential libssl-dev libffi-dev python3-dev 39.8s
=> [3/6] RUN python -m ensurepip --upgrade || (wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py && python /tmp/get-pip.py --user) 3.0s
=> [4/6] RUN python -m pip --version 0.4s
=> [5/6] RUN python -m pip install --upgrade pip && python -m pip install "gevent>=21.12.0" psutil pymysql flask-appbuilder 21.2s
=> [6/6] RUN python -c "import gevent; print(f'✅ Successfully imported gevent {gevent.__version__}')" 0.4s
=> exporting to image 12.7s
=> => exporting layers 9.7s
=> => exporting manifest sha256:110799b44b40f865ae592e760327dbea89f0afe78fe517ca6ab7795fc458eb1b 0.0s
=> => exporting config sha256:73dad9617916977e888fa45071347822fbd95057cd2070b82b89ddf25cf8ea83 0.0s
=> => exporting attestation manifest sha256:62f7f32d24dba9199b0a69458cb80018db2d1c448676f5ed9814b128e183eb0d 0.0s
=> => exporting manifest list sha256:b80232b9847656b65d53b3ba460598c5cba5428d2ae0555e98010618df3a4f9c 0.0s
=> => naming to docker.io/library/superset-with-gevent:latest 0.0s
=> => unpacking to docker.io/library/superset-with-gevent:latest 2.9s
=> resolving provenance for metadata file 0.0s
[+] Building 1/1
✔ superset-with-gevent Built 0.0s
[+] Running 6/6
✔ Container superset_init Removed 0.1s
✔ Container superset_celery Removed 0.1s
✔ Container nginx Removed 0.7s
✔ Container superset_app Removed 1.6s
✔ Container redis Removed 0.5s
✔ Network superset-prod_superset-net Removed 0.4s
[+] Running 6/6
✔ Network superset-prod_superset-net Created 0.0s
✔ Container redis Started 0.6s
✔ Container superset_app Started 0.7s
✔ Container superset_celery Started 0.9s
✔ Container nginx Started 1.0s
✔ Container superset_init Started 0.8s
gapinyc@DESKTOP-9QS7RL5:~/superset-prod$ docker exec superset_app ps aux | grep gunicorn
superset 1 0.3 0.3 34064 27992 ? Ss 00:50 0:00 /app/.venv/bin/python3 /app/.venv/bin/gunicorn -w 4 -k gevent --bind 0.0.0.0:8088 superset.app:create_app()
superset 7 10.4 2.8 989260 224104 ? Sl 00:50 0:06 /app/.venv/bin/python3 /app/.venv/bin/gunicorn -w 4 -k gevent --bind 0.0.0.0:8088 superset.app:create_app()
superset 8 10.3 2.8 989260 224564 ? Sl 00:50 0:06 /app/.venv/bin/python3 /app/.venv/bin/gunicorn -w 4 -k gevent --bind 0.0.0.0:8088 superset.app:create_app()
superset 9 10.2 2.8 989092 224508 ? Sl 00:50 0:05 /app/.venv/bin/python3 /app/.venv/bin/gunicorn -w 4 -k gevent --bind 0.0.0.0:8088 superset.app:create_app()
superset 10 10.8 2.8 989204 224768 ? Sl 00:50 0:06 /app/.venv/bin/python3 /app/.venv/bin/gunicorn -w 4 -k gevent --bind 0.0.0.0:8088 superset.app:create_app()
gapinyc@DESKTOP-9QS7RL5:~/superset-prod$ docker exec superset_app python -c "from PIL import Image; print('OK')"
OK
gapinyc@DESKTOP-9QS7RL5:~/superset-prod$ docker logs superset_app | grep -i error
[2025-10-22 00:50:25 +0000] [1] [INFO] Starting gunicorn 23.0.0
[2025-10-22 00:50:25 +0000] [1] [INFO] Listening at: http://0.0.0.0:8088 (1)
[2025-10-22 00:50:25 +0000] [1] [INFO] Using worker: gevent
[2025-10-22 00:50:25 +0000] [7] [INFO] Booting worker with pid: 7
[2025-10-22 00:50:25 +0000] [8] [INFO] Booting worker with pid: 8
[2025-10-22 00:50:25 +0000] [9] [INFO] Booting worker with pid: 9
[2025-10-22 00:50:26 +0000] [10] [INFO] Booting worker with pid: 10
2025-10-22 00:50:29,899:INFO:superset.initialization:Setting database isolation level to READ COMMITTED
2025-10-22 00:50:29,900: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-limiter.readthedocs.io#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-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
warnings.warn(
2025-10-22 00:50:29,937: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-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
warnings.warn(
2025-10-22 00:50:29,984: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-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
warnings.warn(
gapinyc@DESKTOP-9QS7RL5:~/superset-prod$ docker compose superset_init
Usage: docker compose [OPTIONS] COMMAND
Define and run multi-container applications with Docker
Options:
--all-resources Include all resources, even those not used by services
--ansi string Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
--compatibility Run compose in backward compatibility mode
--dry-run Execute command in dry run mode
--env-file stringArray Specify an alternate environment file
-f, --file stringArray Compose configuration files
--parallel int Control max parallelism, -1 for unlimited (default -1)
--profile stringArray Specify a profile to enable
--progress string Set type of progress output (auto, tty, plain, json, quiet)
--project-directory string Specify an alternate working directory
(default: the path of the, first specified, Compose file)
-p, --project-name string Project name
Management Commands:
bridge Convert compose files into another model
Commands:
attach Attach local standard input, output, and error streams to a service's running container
build Build or rebuild services
commit Create a new image from a service container's changes
config Parse, resolve and render compose file in canonical format
cp Copy files/folders between a service container and the local filesystem
create Creates containers for a service
down Stop and remove containers, networks
events Receive real time events from containers
exec Execute a command in a running container
export Export a service container's filesystem as a tar archive
images List images used by the created containers
kill Force stop service containers
logs View output from containers
ls List running compose projects
pause Pause services
port Print the public port for a port binding
ps List containers
publish Publish compose application
pull Pull service images
push Push service images
restart Restart service containers
rm Removes stopped service containers
run Run a one-off command on a service
scale Scale services
start Start services
stats Display a live stream of container(s) resource usage statistics
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker Compose version information
volumes List volumes
wait Block until containers of all (or specified) services stop.
watch Watch build context for service and rebuild/refresh containers when files are updated
Run 'docker compose COMMAND --help' for more information on a command.
unknown docker command: "compose superset_init"
gapinyc@DESKTOP-9QS7RL5:~/superset-prod$ docker logs superset_init
Waiting for Superset DB to be ready...
Loaded your LOCAL configuration at [/etc/superset/superset_config.py]
2025-10-22 00:50:42,163:ERROR:superset.app:Failed to create app
Traceback (most recent call last):
File "/app/.venv/lib/python3.10/site-packages/superset/app.py", line 40, in create_app
app_initializer.init_app()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 466, in init_app
self.setup_db()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 662, in setup_db
pessimistic_connection_handling(db.engine)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 998, in engine
return self.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1017, in get_engine
return connector.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 594, in get_engine
self._engine = rv = self._sa.create_engine(sa_url, options)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1027, in create_engine
return sqlalchemy.create_engine(sa_url, **engine_opts)
File "<string>", line 2, in create_engine
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 375, in warned
return fn(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 544, in create_engine
dbapi = dialect_cls.dbapi(**dbapi_args)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 80, in dbapi
return __import__("pymysql")
ModuleNotFoundError: No module named 'pymysql'
Traceback (most recent call last):
File "/app/.venv/bin/superset", line 10, in <module>
sys.exit(superset())
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1685, in invoke
super().invoke(ctx)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 355, in decorator
app = __ctx.ensure_object(ScriptInfo).load_app()
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 309, in load_app
app = locate_app(import_name, name)
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 238, in locate_app
return find_app_by_string(module, app_name)
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 166, in find_app_by_string
app = attr(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/superset/app.py", line 40, in create_app
app_initializer.init_app()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 466, in init_app
self.setup_db()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 662, in setup_db
pessimistic_connection_handling(db.engine)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 998, in engine
return self.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1017, in get_engine
return connector.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 594, in get_engine
self._engine = rv = self._sa.create_engine(sa_url, options)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1027, in create_engine
return sqlalchemy.create_engine(sa_url, **engine_opts)
File "<string>", line 2, in create_engine
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 375, in warned
return fn(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 544, in create_engine
dbapi = dialect_cls.dbapi(**dbapi_args)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 80, in dbapi
return __import__("pymysql")
ModuleNotFoundError: No module named 'pymysql'
Loaded your LOCAL configuration at [/etc/superset/superset_config.py]
2025-10-22 00:50:45,273:ERROR:superset.app:Failed to create app
Traceback (most recent call last):
File "/app/.venv/lib/python3.10/site-packages/superset/app.py", line 40, in create_app
app_initializer.init_app()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 466, in init_app
self.setup_db()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 662, in setup_db
pessimistic_connection_handling(db.engine)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 998, in engine
return self.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1017, in get_engine
return connector.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 594, in get_engine
self._engine = rv = self._sa.create_engine(sa_url, options)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1027, in create_engine
return sqlalchemy.create_engine(sa_url, **engine_opts)
File "<string>", line 2, in create_engine
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 375, in warned
return fn(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 544, in create_engine
dbapi = dialect_cls.dbapi(**dbapi_args)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 80, in dbapi
return __import__("pymysql")
ModuleNotFoundError: No module named 'pymysql'
Traceback (most recent call last):
File "/app/.venv/bin/superset", line 10, in <module>
sys.exit(superset())
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1685, in invoke
super().invoke(ctx)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 355, in decorator
app = __ctx.ensure_object(ScriptInfo).load_app()
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 309, in load_app
app = locate_app(import_name, name)
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 238, in locate_app
return find_app_by_string(module, app_name)
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 166, in find_app_by_string
app = attr(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/superset/app.py", line 40, in create_app
app_initializer.init_app()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 466, in init_app
self.setup_db()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 662, in setup_db
pessimistic_connection_handling(db.engine)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 998, in engine
return self.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1017, in get_engine
return connector.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 594, in get_engine
self._engine = rv = self._sa.create_engine(sa_url, options)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1027, in create_engine
return sqlalchemy.create_engine(sa_url, **engine_opts)
File "<string>", line 2, in create_engine
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 375, in warned
return fn(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 544, in create_engine
dbapi = dialect_cls.dbapi(**dbapi_args)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 80, in dbapi
return __import__("pymysql")
ModuleNotFoundError: No module named 'pymysql'
Loaded your LOCAL configuration at [/etc/superset/superset_config.py]
2025-10-22 00:50:48,401:ERROR:superset.app:Failed to create app
Traceback (most recent call last):
File "/app/.venv/lib/python3.10/site-packages/superset/app.py", line 40, in create_app
app_initializer.init_app()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 466, in init_app
self.setup_db()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 662, in setup_db
pessimistic_connection_handling(db.engine)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 998, in engine
return self.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1017, in get_engine
return connector.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 594, in get_engine
self._engine = rv = self._sa.create_engine(sa_url, options)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1027, in create_engine
return sqlalchemy.create_engine(sa_url, **engine_opts)
File "<string>", line 2, in create_engine
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 375, in warned
return fn(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 544, in create_engine
dbapi = dialect_cls.dbapi(**dbapi_args)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 80, in dbapi
return __import__("pymysql")
ModuleNotFoundError: No module named 'pymysql'
Traceback (most recent call last):
File "/app/.venv/bin/superset", line 10, in <module>
sys.exit(superset())
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1685, in invoke
super().invoke(ctx)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/app/.venv/lib/python3.10/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 355, in decorator
app = __ctx.ensure_object(ScriptInfo).load_app()
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 309, in load_app
app = locate_app(import_name, name)
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 238, in locate_app
return find_app_by_string(module, app_name)
File "/app/.venv/lib/python3.10/site-packages/flask/cli.py", line 166, in find_app_by_string
app = attr(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/superset/app.py", line 40, in create_app
app_initializer.init_app()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 466, in init_app
self.setup_db()
File "/app/.venv/lib/python3.10/site-packages/superset/initialization/__init__.py", line 662, in setup_db
pessimistic_connection_handling(db.engine)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 998, in engine
return self.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1017, in get_engine
return connector.get_engine()
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 594, in get_engine
self._engine = rv = self._sa.create_engine(sa_url, options)
File "/app/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1027, in create_engine
return sqlalchemy.create_engine(sa_url, **engine_opts)
File "<string>", line 2, in create_engine
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 375, in warned
return fn(*args, **kwargs)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 544, in create_engine
dbapi = dialect_cls.dbapi(**dbapi_args)
File "/app/.venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 80, in dbapi
return __import__("pymysql")
ModuleNotFoundError: No module named 'pymysql'
✅ Superset 初始化完成!
gapinyc@DESKTOP-9QS7RL5:~/superset-prod$
# Dockerfile.superset
FROM apache/superset:latest
# Step 1: 切换为 root 用户(必须)
USER root
# Step 2: 安装系统级编译依赖
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
libssl-dev \
libffi-dev \
python3-dev \
libev-dev \
libjpeg-dev \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
# Step 3: 激活虚拟环境并重新安装 pip
# 注意:官方镜像的 Python 虚拟环境位于 /app/.venv
ENV VIRTUAL_ENV=/app/.venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# 方法一:使用 ensurepip 强制重建 pip(推荐)
RUN python -m ensurepip --upgrade || \
(wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py && \
python /tmp/get-pip.py --user)
# 验证 pip 是否可用
RUN python -m pip --version
# Step 4: 安装所需 Python 包
RUN python -m pip install --upgrade pip && \
python -m pip install \
"gevent>=21.12.0" \
psutil \
pymysql \
flask-appbuilder \
pillow
# Step 5: 验证 gevent 是否成功导入
RUN python -c "import gevent; print(f'✅ Successfully imported gevent {gevent.__version__}')"
# Step 6: 切回普通用户(安全)
USER superset
这是为什么呢