IBM Cloud Functions:如何运行 Docker 功能?

问题描述

FROM python:3.7
copY ./src /data/python
workdir /data/python
RUN pip install --no-cache-dir flask
EXPOSE 8080
CMD ["python","main.py"]
  • main.py
import os
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return {'body': os.environ.items()}


def run():
    app.run(host='0.0.0.0',port=8080)


if __name__ == '__main__':
    run()

点击调用结果

[
  "2021-01-29T09:53:30.727847Z    stdout: * Serving Flask app \"main\" (lazy loading)","2021-01-29T09:53:30.727905Z    stdout: * Environment: production","2021-01-29T09:53:30.727913Z    stdout: WARNING: This is a development server. Do not use it in a production deployment.","2021-01-29T09:53:30.727918Z    stdout: Use a production Wsgi server instead.","2021-01-29T09:53:30.727923Z    stdout: * Debug mode: off","2021-01-29T09:53:30.731130Z    stderr: * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)","2021-01-29T09:53:30.747035Z    stderr: 172.30.139.167 - - [29/Jan/2021 09:53:30] \"\u001b[33mPOST /init HTTP/1.1\u001b[0m\" 404 -","2021-01-29T09:53:30.748Z       stderr: The action did not initialize or run as expected. Log data might be missing."
]

我已将 Docker 容器添加到 IBM Cloud Functions

解决这个问题的最佳方法是什么?

解决方法

上传到 IBM Cloud Functions 的 Docker 映像必须实现某些 REST 接口。实现此目标的最简单方法是将您的容器基于 openwhisk/dockerskeleton 映像。

请看 How to run a docker image in IBM Cloud functions?https://github.com/iainhouston/dockerPython 更多详情

,

IBM Cloud Functions 的文档对 how to create Docker-based functions 有一些指示。恕我直言,云函数更适用于短期运行的无服务器工作负载,我想以 IBM Cloud Code Engine 的形式向您指出另一种无服务器技术。它的模型基于 Docker 容器,其用例之一是基于 http 的 Web 应用程序,例如您的 Flask 应用程序。

您可以根据需要定义 Dockerfile,不需要特殊的骨架,只需遵循此 guide on Dockerfile best practices for Code Engine