【问题标题】:Docker image conda environment and flaskDocker镜像conda环境和flask
【发布时间】:2019-10-29 02:07:30
【问题描述】:

我想让一个 Flask API 在 conda 环境中运行到 docker 中。

看来我可以从.yml文件安装conda环境了。

但是当我执行 docker run 时,我无法运行应用程序。

我只是对不存在的文件有错误

exec source activate flask_env && python app.py failed: No such file or directory

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

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" ]

而环境文件是:

name: myapp
channels:
  - conda-forge
  - defaults
dependencies:
  - flask=1.0.2
  - python=3.7.3

我尝试了很多东西,但我无法让它发挥作用。我错过了什么吗?

谢谢

【问题讨论】:

    标签: python docker flask conda miniconda


    【解决方案1】:

    this:

    CMD指令有三种形式:

    CMD ["executable","param1","param2"] (执行形式,这是首选形式)
    CMD ["param1","param2"](作为 ENTRYPOINT 的默认参数)
    CMD命令param1 param2(shell形式)

    这里,你CMD被用作ENTRYPOINT的参数(见this),所以你必须使用下一个格式:

    CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
    

    但是,你的命令中有&&,所以你必须启用json格式的shell。因此,对于您的情况,这可能是下一个,仅供参考:

    CMD ["bash", "-c", "source activate flask_env && python app.py"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-06
      • 2023-03-03
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      相关资源
      最近更新 更多