Peter Weyand
Peter Weyand

Reputation: 2259

Gunicorn throwing error - cannot find executable on $PATH (Docker/Nginx)

I'm trying to get gunicorn working with nginx in a docker compose file. My python code is just a flask CRUD app.

The entry point for my flask app is at ./flask_app/app.py and I've got the following for a docker compose yaml file

version: '3'

services:

  flask_app:
    container_name: flask_app
    restart: always
    build: ./flask_app
    ports:
      - "8000:8000"
    command: gunicorn -w 1 -b :8000 app:server


  nginx:
    container_name: nginx
    restart: always
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - flask_app

and here's my app file

from flask import Flask
from flask_marshmallow import Marshmallow
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config.from_pyfile('config.py')

db = SQLAlchemy(app)
ma = Marshmallow(app)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=6000, debug=True)

However when I run the above I'm getting the following error

Recreating ce38627418c1_ce38627418c1_ce38627418c1_ce38627418c1_ce38627418c1_flask_app ... error

ERROR: for ce38627418c1_ce38627418c1_ce38627418c1_ce38627418c1_ce38627418c1_flask_app  Cannot start service flask_app: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"gunicorn\": executable file not found in $PATH": unknown

ERROR: for flask_app  Cannot start service flask_app: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"gunicorn\": executable file not found in $PATH": unknown
ERROR: Encountered errors while bringing up the project.

As far as I can tell it doesn't seem my app = Flask(__name__) variable and I'm not sure why. I'm basing my approach on this working example https://github.com/sladkovm/docker-flask-gunicorn-nginx.

Does anyone have any ideas?

EDIT: In my flask_app directory I have a Dockerfile that the docker_compose file is pointing to. Here is what it looks like:

FROM python:3.6.2

RUN mkdir -p /flask_app/app
WORKDIR /flask_app/app
COPY . /flask_app/app
RUN pip install --no-cache-dir -r requirements.txt

COPY . /flask_app/app

Upvotes: 12

Views: 31370

Answers (3)

Wissam Moussa
Wissam Moussa

Reputation: 41

This may be trivial but for me it was just that I forgot to include gunicorn in my requirements.txt file.

Upvotes: 4

saelozahra
saelozahra

Reputation: 123

try

pip install gunicorn
pip freeze > requirements.txt

and then

docker-compose build
docker-compose up -d

enjoy

Upvotes: 11

John Scolaro
John Scolaro

Reputation: 702

This may not be the solution for the original poster's problem, but in case anyone else new to docker is on this page searching for a solution, maybe this will help.

If you're building with docker-compose, remember that docker-compose up doesn't actually rebuild images (https://github.com/docker/compose/issues/1487), so perhaps your old requirements file without gunicorn is still being used.

To fix this, rebuild with docker-compose build and you should be fine.

Hopefully this helped someone.

Upvotes: 7

Related Questions