Докер с изображением среды и колбы - PullRequest
0 голосов
/ 14 июня 2019

Я бы хотел, чтобы Flask API работал в докере с окружением conda.

Кажется, я могу установить окружение conda из файла .yml.

Но я могу 'я не могу запустить приложение, когда я запускаю Docker.

У меня просто есть ошибки из-за несуществующих файлов

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

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

Файл Docker:

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

Я много чего пробовал, но не могу заставить его работать.Я что-то пропустил?

Спасибо

1 Ответ

1 голос
/ 16 июня 2019

См. это :

Инструкция CMD имеет три формы:

CMD ["исполняемый файл", "param1", "param2"] (форма exec, это предпочтительная форма)
CMD ["param1", "param2"] (в качестве параметров по умолчанию для ENTRYPOINT)
CMD команда param1 param2 (форма оболочки)

Здесь вы CMD используются в качестве параметров ENTRYPOINT (см. this ), поэтому вы должны использовать следующий формат:

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

Но ваша команда содержит &&, поэтому вы должны включить оболочку в формате json. Так что для вашего случая это может быть следующим, к вашему сведению:

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