我正试图让gunicorn在docker compose文件中使用nginx。我的python代码只是一个烧瓶CRUD应用程序。
我的烧瓶应用程序的入口点位于./flask_app/app.py并且我已经为docker compose yaml文件提供了以下内容
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
这是我的app文件
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)
然而,当我运行以上内容时,我收到以下错误
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.
据我所知,它似乎不是我的app = Flask(__name__)
变量,我不知道为什么。我的方法基于这个工作示例https://github.com/sladkovm/docker-flask-gunicorn-nginx。
有没有人有任何想法?
编辑:在我的flask_app目录中,我有一个docker_compose文件指向的Dockerfile。这是它的样子:
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
答案 0 :(得分:0)
这可能不是原始海报问题的解决方案,但是如果此页面上没有docker新手,则可能会有所帮助。
如果您使用docker-compose进行构建,请记住docker-compose up实际上并没有重建映像(https://github.com/docker/compose/issues/1487),因此也许您仍在使用不带gunicorn的旧需求文件。
要解决此问题,请使用^(?:[^\/]*\/){2}[^\/]*
进行重建,这样就可以了。
希望这对某人有所帮助。