[我正在尝试创建一个在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
自行解决...
我需要添加
- 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。