Skip to content

amancevice/superset:6.1.0 fails to boot: gunicorn's gevent worker requires gevent >= 24.10.1, image ships an older gevent #294

Description

@paulohbalmeida

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

  1. Pull and run amancevice/superset:6.1.0 with the default CMD
    (gunicorn "superset.app:create_app()") and the default GUNICORN_WORKER_CLASS=gevent.
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions