Хост-машина (Ubuntu 20.04, python 3.7.6, fre sh virtualenv)
У меня есть база данных PostgreSQL с таблицей, в которой столбец имеет тип character-varying
.
Затем я запускаю python manage.py inspectdb
. Он создает такую модель, которую я сохраняю как файл модели и использую в проекте:
class TestModel(models.Model):
message = models.CharField(max_length=-1, blank=True, null=True)
(это ожидается, поскольку Django не поддерживает поля char без max_length.)
Затем я запускаю python manage.py check
на хост-машине, без ошибок.
System check identified no issues (0 silenced).
Наконец, я запускаю pip freeze > requirements.txt
для дальнейшего использования.
Docker Контейнер (базовое изображение : python 3.7.6: alpine)
Образ docker создается с использованием следующего файла Docker:
FROM python:3.7.6-alpine
WORKDIR /usr/src/app
RUN apk update \
&& apk add postgresql-dev gcc python3-dev musl-dev
RUN pip install --upgrade pip
COPY /my_app/requirements.txt .
RUN pip install -r requirements.txt
COPY /my_app .
Затем запустите /bin/sh
с образом docker и попробуйте :
python manage.py check
... Выдает ошибку:
myapp.TestModel.message: (fields.E121) 'max_length' must be a positive integer.
Как это вообще возможно?
Эти две среды имеют одинаковую версию python, те же python пакетов. Вывод python --version
и pip freeze
из источников идентичен. Единственное различие, которое я могу сказать, - это разные Linux дистрибутивы.
Тем не менее, я могу выполнить развертывание со сборкой Docker, поскольку Gunicorn все равно. Но мне кажется, что что-то не так.
PS Мой коллега сказал мне, что то же самое произошло, когда он попытался собрать и запустить приложение на двух Linux машинах (Ubuntu и CentOS). Так что это, вероятно, не связано с docker.