[Python] Python gunicorn not working with Docker CMD

Discussão em 'Python' iniciado por Stack, Abril 8, 2025.

  1. Stack

    Stack Membro Participativo

    I have django App that also runs some Javascript templates with node. I'm struggling to run Gunicorn as the CMD of the Dockerfile.

    Here is my dockerfile:

    FROM node:22.12.0-alpine3.21

    RUN mkdir /app
    COPY . /app

    WORKDIR /app/tools
    RUN npm install --loglevel verbose
    RUN npm run build

    WORKDIR /app
    RUN ls -la

    # Set environment variable for Python version
    ENV PYTHON_VERSION 3.10.10

    # Install dependencies and Python 3.10
    RUN apk update
    RUN apk update && apk add --no-cache \
    build-base \
    bash \
    libffi-dev \
    zlib-dev \
    bzip2-dev \
    ncurses-dev \
    openssl-dev \
    sqlite-dev \
    readline-dev \
    tk-dev \
    gdbm-dev \
    xz-dev \
    libnsl-dev \
    curl \
    dcron
    RUN curl -O https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz \
    && tar -xvf Python-${PYTHON_VERSION}.tgz \
    && cd Python-${PYTHON_VERSION} \
    && ./configure --enable-optimizations \
    && make -j$(nproc) \
    && make altinstall \
    && cd .. \
    && rm -rf Python-${PYTHON_VERSION} Python-${PYTHON_VERSION}.tgz \
    && python3.10 --version

    RUN ln -sf /usr/local/bin/python3.10 /usr/bin/python3 \
    && ln -sf /usr/local/bin/pip3.10 /usr/bin/pip3

    # Verify Python and pip installation
    RUN python3 --version && pip3 --version
    # Install pip and upgrade setuptools and wheel
    RUN pip3 install --no-cache --upgrade pip setuptools wheel
    RUN pip3 install -r requirements.txt

    EXPOSE 8000

    ENV PYTHONPATH=/app
    WORKDIR /app
    CMD ["python3", "-m", "gunicorn", "--bind", "0.0.0.0:8000", "wsgi.application"]


    I have a wsgi.py at the same level of the manage.py.

    The problem is:

    • In the Dockerfile, CMD ["python3","manage.py", "runserver", "0.0.0.0:8000"] WORKS ✅
    • docker run --rm -it -p 8000:8000 <image> python3 -m gunicorn --bind 0.0.0.0:8000 wsgi:application WORKS ✅
    • In the Dockerfile, CMD ["gunicorn", "--bind", "0.0.0.0:8000", "wsgi.application"] DON'T WORK ❌

    The error I'm getting:

    [2025-04-06 14:54:57 +0000] [1] [INFO] Starting gunicorn 23.0.0
    [2025-04-06 14:54:57 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
    [2025-04-06 14:54:57 +0000] [1] [INFO] Using worker: sync
    [2025-04-06 14:54:57 +0000] [8] [INFO] Booting worker with pid: 8
    [2025-04-06 14:54:57 +0000] [8] [ERROR] Exception in worker process
    Traceback (most recent call last):
    File "/usr/local/lib/python3.10/site-packages/gunicorn/arbiter.py", line 608, in spawn_worker
    worker.init_process()
    File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/base.py", line 135, in init_process
    self.load_wsgi()
    File "/usr/local/lib/python3.10/site-packages/gunicorn/workers/base.py", line 147, in load_wsgi
    self.wsgi = self.app.wsgi()
    File "/usr/local/lib/python3.10/site-packages/gunicorn/app/base.py", line 66, in wsgi
    self.callable = self.load()
    File "/usr/local/lib/python3.10/site-packages/gunicorn/app/wsgiapp.py", line 57, in load
    return self.load_wsgiapp()
    File "/usr/local/lib/python3.10/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsgiapp
    return util.import_app(self.app_uri)
    File "/usr/local/lib/python3.10/site-packages/gunicorn/util.py", line 370, in import_app
    mod = importlib.import_module(module)
    File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
    File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
    File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
    File "<frozen importlib._bootstrap>", line 1001, in _find_and_load_unlocked
    ModuleNotFoundError: No module named 'wsgi.application'; 'wsgi' is not a package


    WHY? ANY HELP WELCOME!

    Continue reading...

Compartilhe esta Página