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

时间:2019-02-12 12:11:40

标签: docker alpine sanic ujson

Dockerfile:

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)

使用docker image运行Sanic服务器返回500:

  

TypeError:类型为“ datetime”的对象不可JSON序列化

但是从命令行运行此服务器应用程序就可以了。

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

我认为Sanic服务器无法找到ujson包并使用默认的python json。

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

1 个答案:

答案 0 :(得分:0)

尝试从git master源安装ujson

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