amancevice/superset:6.1.0 fails to boot: gunicorn's gevent worker requires gevent >= 24.10.1, image ships an older gevent
Summary
The 6.1.0 image does not start. gunicorn cannot load the default gevent
worker class because the bundled gevent is older than what the bundled gunicorn
requires. The container crash-loops on startup. Downgrading to 6.0.0 resolves
the issue, which points to a packaging/version-skew regression introduced in the
6.1.0 build rather than a user configuration problem.
Environment
- Image:
amancevice/superset:6.1.0
- Default worker class:
gevent (GUNICORN_WORKER_CLASS=gevent in the image)
- Python: 3.12
Steps to reproduce
- Pull and run
amancevice/superset:6.1.0 with the default CMD
(gunicorn "superset.app:create_app()") and the default GUNICORN_WORKER_CLASS=gevent.
- Observe gunicorn failing to boot workers.
No custom config, volume, or env is required to trigger this — it reproduces on a
clean run of the image.
Actual result
gunicorn refuses to load the gevent worker class and the container fails to start:
Error: class uri 'gevent' invalid or not found:
[Traceback (most recent call last):
...
File "/usr/local/lib/python3.12/site-packages/gunicorn/workers/ggevent.py", line 18, in <module>
raise RuntimeError("gevent worker requires gevent 24.10.1 or higher")
RuntimeError: gevent worker requires gevent 24.10.1 or higher
]
Expected result
The image boots and serves Superset with the default gevent worker.
Root cause analysis
Superset 6.x pins gunicorn==25.3.0 in its requirements. The gunicorn 25.x
series raised the minimum supported gevent version to 24.10.1 (enforced in
gunicorn/workers/ggevent.py).
However, gevent is not part of Superset's base requirements — it is only an
optional extra (apache-superset[gevent]). As a result, the gevent version baked
into the 6.1.0 image was not bumped alongside the gunicorn upgrade, so the image
ends up with gunicorn 25.3.0 (needs gevent >= 24.10.1) + an older gevent, which
fails the version check at worker load time.
6.0.0 does not exhibit this, consistent with the gunicorn/gevent skew being
introduced in the 6.1.0 build.
Version evidence (please fill in from the affected image)
Output of the following, run inside the 6.1.0 image, would confirm the exact skew:
docker run --rm amancevice/superset:6.1.0 \
python -c "import gevent, gunicorn; print('gevent', gevent.__version__); print('gunicorn', gunicorn.__version__)"
Expected to show gunicorn 25.3.0 and a gevent version below 24.10.1.
Workarounds (for other users hitting this)
- Pin back to
amancevice/superset:6.0.0.
- Build a derived image that upgrades gevent:
FROM amancevice/superset:6.1.0
RUN pip install --no-cache-dir 'gevent>=24.10.1'
- Switch the worker class to one that doesn't use gevent:
GUNICORN_WORKER_CLASS=gthread.
Suggested fix
Bump the gevent version installed in the image to >= 24.10.1 so it matches the
gunicorn 25.3.0 floor (gevent 24.10.x is compatible with the greenlet==3.1.1
that Superset 6.x pins). Effectively, install the [gevent] extra / an explicit
gevent>=24.10.1 during the image build for the tags that ship gunicorn 25.x.
amancevice/superset:6.1.0fails to boot: gunicorn's gevent worker requires gevent >= 24.10.1, image ships an older geventSummary
The
6.1.0image does not start. gunicorn cannot load the defaultgeventworker class because the bundled gevent is older than what the bundled gunicorn
requires. The container crash-loops on startup. Downgrading to
6.0.0resolvesthe issue, which points to a packaging/version-skew regression introduced in the
6.1.0build rather than a user configuration problem.Environment
amancevice/superset:6.1.0gevent(GUNICORN_WORKER_CLASS=geventin the image)Steps to reproduce
amancevice/superset:6.1.0with the defaultCMD(
gunicorn "superset.app:create_app()") and the defaultGUNICORN_WORKER_CLASS=gevent.No custom config, volume, or env is required to trigger this — it reproduces on a
clean run of the image.
Actual result
gunicorn refuses to load the gevent worker class and the container fails to start:
Expected result
The image boots and serves Superset with the default gevent worker.
Root cause analysis
Superset 6.x pins
gunicorn==25.3.0in its requirements. The gunicorn 25.xseries raised the minimum supported gevent version to
24.10.1(enforced ingunicorn/workers/ggevent.py).However,
geventis not part of Superset's base requirements — it is only anoptional extra (
apache-superset[gevent]). As a result, the gevent version bakedinto the
6.1.0image was not bumped alongside the gunicorn upgrade, so the imageends up with gunicorn 25.3.0 (needs gevent >= 24.10.1) + an older gevent, which
fails the version check at worker load time.
6.0.0does not exhibit this, consistent with the gunicorn/gevent skew beingintroduced in the
6.1.0build.Version evidence (please fill in from the affected image)
Output of the following, run inside the
6.1.0image, would confirm the exact skew:docker run --rm amancevice/superset:6.1.0 \ python -c "import gevent, gunicorn; print('gevent', gevent.__version__); print('gunicorn', gunicorn.__version__)"Expected to show
gunicorn 25.3.0and ageventversion below24.10.1.Workarounds (for other users hitting this)
amancevice/superset:6.0.0.GUNICORN_WORKER_CLASS=gthread.Suggested fix
Bump the gevent version installed in the image to
>= 24.10.1so it matches thegunicorn 25.3.0 floor (gevent 24.10.x is compatible with the
greenlet==3.1.1that Superset 6.x pins). Effectively, install the
[gevent]extra / an explicitgevent>=24.10.1during the image build for the tags that ship gunicorn 25.x.