[英]Docker image conda environment and flask
I would like to make a Flask API running into docker with a conda environment. 我想让一个Flask API在一个conda环境下运行到docker中。
It seems that I can install the conda environment from the .yml file. 看来我可以从.yml文件安装conda环境。
But I can't run the app when I do docker run. 但是当我执行docker run时,我无法运行该应用程序。
I just have errors about files that do not exist 我只是有关于不存在的文件的错误
exec source activate flask_env && python app.py failed: No such file or directory
The flask API is based on a simple example: flask API基于一个简单的示例:
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
The Dockerfile is: Dockerfile是:
FROM continuumio/miniconda3:latest
WORKDIR /app
# Install myapp requirements
COPY environment.yml /app/environment.yml
RUN conda config --add channels conda-forge \
&& conda env create -n myapp -f environment.yml \
&& rm -rf /opt/conda/pkgs/*
# Copy all files after to avoid rebuild the conda env each time
COPY . /app/
# activate the myapp environment
ENV PATH /opt/conda/envs/myapp/bin:$PATH
# Launch the API
CMD [ "source activate flask_env && python app.py" ]
And the environment file is: 环境文件是:
name: myapp
channels:
- conda-forge
- defaults
dependencies:
- flask=1.0.2
- python=3.7.3
I tried a lot of thing but I can't make it works. 我尝试了很多事情,但无法使其正常工作。 Did I miss something ? 我错过了什么 ?
Thank you 谢谢
The CMD instruction has three forms: CMD指令具有三种形式:
CMD ["executable","param1","param2"] (exec form, this is the preferred form) CMD [“ executable”,“ param1”,“ param2”](执行形式,这是首选形式)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT) CMD [“ param1”,“ param2”](作为ENTRYPOINT的默认参数)
CMD command param1 param2 (shell form) CMD命令param1 param2(shell形式)
Here, you CMD
is used as parameters of ENTRYPOINT
(see this ), so you have to use next format: 在这里,你CMD
作为参数ENTRYPOINT
(见本 ),所以你必须使用下一个格式:
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
But, your command have &&
in it, so you have to enable shell in json format. 但是,您的命令中包含&&
,因此您必须启用json格式的shell。 So for your case, this could be next, FYI: 所以对于您的情况,这可能是下一个,仅供参考:
CMD ["bash", "-c", "source activate flask_env && python app.py"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.