Docker Sanic 在 alpine:latest(3.9) 上的图像使用 python json 而不是 ujson

Docker image with Sanic over alpine:latest(3.9) uses python json instead of ujson

Docker 文件:

FROM alpine:latest

RUN apk add --no-cache python3 \
    && python3 -m ensurepip \
    && rm -r /usr/lib/python*/ensurepip \
    && pip3 install -U pip setuptools ez_setup \
    && rm -r /root/.cache/* \
    && apk add --no-cache gcc autoconf python3-dev musl-dev make openssl-dev \
    && pip3 install -U sanic \
    && apk del gcc autoconf python3-dev musl-dev make openssl-dev \
    && rm -rf /var/cache/apk/* /var/tmp/* /tmp/* /root/.cache/*

WORKDIR /app
COPY . /app

EXPOSE 8000
CMD ["python3", "./app.py"]

Sanic 服务器:

from sanic import Sanic
from sanic.response import json
from datetime import datetime as dt

app = Sanic()


@app.route("/")
async def test(request):
    return json({
        "hello": "world",
        "date_is": dt.utcnow()
    })

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

运行 Sanic 服务器使用 docker 图片 returns 500:

TypeError: Object of type 'datetime' is not JSON serializable

但是 运行 这个来自命令行的服务器应用程序工作正常。

更有趣的是,如果使用 Alpine linux 版本 3.8,则服务器应用程序可以正常工作。

我认为 Sanic 服务器找不到 ujson 包并使用默认 python json.

有人对如何解决这个问题有什么建议吗?

尝试从 git 主源安装 ujson

https://github.com/esnme/ultrajson/issues/326