Как запустить образ докера в функциях IBM Cloud? - PullRequest
0 голосов
/ 03 июня 2019

У меня есть простая программа на Python, которую я хочу запустить в функциях IBM Cloud.Увы, ему нужны две библиотеки (O365 и PySnow), поэтому мне нужно докеризовать их, и он должен иметь возможность принимать канал Json из STDIN.Мне удалось это сделать:

FROM python:3
ADD requirements.txt ./
RUN pip install -r requirements.txt
ADD ./main ./main
WORKDIR /main
CMD ["python", "main.py"]

Это работает с: cat env_var.json | docker run -i f9bf70b8fc89

Я добавил контейнер Docker в IBM Cloud Functions следующим образом:

ibmcloud fn action create e2t-bridge --docker [username]/e2t-bridge

Однако, когда я запускаю его, время ожидания истекает.

Теперь я увидел возможный маршрут решения, где я докеризую его как приложение Openwhisk.Но для этого мне нужно создать двоичный файл из моего приложения Python, а затем загрузить его в довольно сложный скелет Openwhisk, как мне кажется?

Но наличие файла, который вы можете просто запустить, было целью моего Docker, поэтому создание двоичного файла с интерпретируемым языком и добавление его в докер Openwhisk просто ужасно неуклюже.

Как лучше всего подойти к этому?

1 Ответ

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

Оказывается, вам не нужно создавать двоичный файл, вам просто нужно отредактировать скелет OpenWhisk следующим образом:

# Dockerfile for example whisk docker action
FROM openwhisk/dockerskeleton

ENV FLASK_PROXY_PORT 8080

### Add source file(s)
ADD requirements.txt /action/requirements.txt
RUN cd /action; pip install -r requirements.txt

# Move the file to 
ADD ./main /action
# Rename our executable Python action
ADD /main/main.py /action/exec

CMD ["/bin/bash", "-c", "cd actionProxy && python -u actionproxy.py"]

И убедитесь, что ваш код Python принимает Json-фид из stdin:

json_input = json.loads(sys.argv[1])

Все объяснение здесь: https://github.com/iainhouston/dockerPython

...