在Docker容器中运行Flask应用会导致“ ./boot.sh:2:exec:gunicorn:not found”

问题描述 投票:-1回答:1

[我正在尝试创建一个在Docker容器中运行的Flask应用,但是我有一些复杂的依赖关系,因此我要从该映像https://hub.docker.com/r/continuumio/anaconda/中进行构建。

我构建图像 (可以正常工作...环境可以正常工作...)

docker build -t my_image:latest .

然后尝试运行它

docker run --name my_image -p 80:5000 --rm my_image:latest

我收到此错误:

./boot.sh: 2: exec: gunicorn: not found

这是我从中建立的目录:

my_template
--api.py
--boot.sh
--environment.yml
--Dockerfile

我有一个非常简单的烧瓶应用程序。api.py

from flask import Flask, jsonify
app = Flask(__name__)

@app.route('/', methods=['GET'])
def hello_world():
    return jsonify({'message': 'Hello World'})

@app.route('/test', methods=['GET'])
def test():
    return jsonify({'test': 'test'})

if __name__ == "__main__":
    app.run(debug=True) # remember to set debug to False

environment.yml如下:

name: ox
channels:
  - conda-forge
  - defaults
dependencies:
  {---OMITTED FOR BREVITY---}
prefix: /home/me/anaconda3/envs/ox

Dockerfile如下:

FROM continuumio/miniconda:latest

WORKDIR /home/conda_flask_docker

COPY environment.yml ./
COPY api.py ./
COPY boot.sh ./

RUN chmod +x boot.sh

RUN conda env create -f environment.yml

RUN echo "source activate ox" > ~/.bashrc
ENV PATH /opt/conda/envs/ox/bin:$PATH

EXPOSE 5000

ENTRYPOINT ["./boot.sh"]

还有... boot.sh

#!/bin/sh
exec gunicorn -b :5000 --access-logfile - --error-logfile - api:app
python docker flask gunicorn
1个回答
0
投票

自行解决...

我需要添加

 - flask=1.1.2=pyh9f0ad1d_0 
 - gunicorn=20.0.4=py38h32f6830_1 

到environment.yml的dependencies部分。在添加Flask和Gunicorn之前,我曾使用conda env export > environment.yml构建了environment.yml

[如果不这样做,则应该通过Dockerfile中的RUN命令添加gunicorn。

© www.soinside.com 2019 - 2024. All rights reserved.