Me gustaría hacer que una API Flask se ejecute en docker con un entorno conda.
Parece que puedo instalar el entorno conda desde el archivo .yml.
Pero no puedo ejecutar la aplicación cuando ejecuto la ventana acoplable.
Solo tengo errores sobre archivos que no existen
exec source activate flask_env && python app.py failed: No such file or directoryLa API del matraz se basa en un ejemplo simple:
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 FalseEl Dockerfile es:
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" ]Y el archivo de entorno es:
name: myapp channels: - conda-forge - defaults dependencies: - flask=1.0.2 - python=3.7.3Intenté muchas cosas pero no puedo hacer que funcione. Me he perdido algo ?
Gracias
Mira esto :
La instrucción CMD tiene tres formas:
CMD ["ejecutable","param1","param2"] (forma ejecutiva, esta es la forma preferida)
CMD ["param1","param2"] (como parámetros predeterminados para ENTRYPOINT)
Comando CMD param1 param2 (formulario de shell)
Aquí, su CMD se usa como parámetro de ENTRYPOINT (vea esto ), por lo que debe usar el siguiente formato:
CMD ["param1","param2"] (as default parameters to ENTRYPOINT) Pero, su comando tiene && en él, por lo que debe habilitar Shell en formato json. Entonces, para su caso, este podría ser el siguiente, FYI:
CMD ["bash", "-c", "source activate flask_env && python app.py"]