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