Образ докера с Sanic поверх альпийского: последний (3.9) использует Python JSON вместо 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)
При запуске сервера Sanic с использованием образа докера возвращается 500:
Ошибка типа: объект типа 'datetime' не поддерживает сериализацию в формате JSON
но запуск этого серверного приложения из командной строки работает просто отлично.
Более интересным является то, что если используется Alpine linux версии 3.8, то серверное приложение прекрасно с ним работает.
Я думаю, что сервер Sanic не может найти пакет ujson и использовать по умолчанию python json.
У кого-нибудь есть предложения как это исправить?
0 ответов
Попробуйте установить ujson из исходного кода git