Django - Не можете скомпилировать сообщения в Alpine? - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь перенести наш образ докера в альпийский режим, но у меня возникла проблема, связанная с тем, что я не могу скомпилировать сообщения во время создания образа.

FROM python:3.6-alpine
ENV PYTHONUNBUFFERED 1

# Creating working directory
RUN mkdir /code
WORKDIR /code

# Copying requirements
COPY ./myproject/ .

RUN apk add --no-cache --virtual .build-deps \
ca-certificates gcc postgresql-dev linux-headers musl-dev \
libffi-dev jpeg-dev zlib-dev \
&& pip install -r requirements.txt \
&& find /usr/local \
    \( -type d -a -name test -o -name tests \) \
    -o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
    -exec rm -rf '{}' + \
&& runDeps="$( \
    scanelf --needed --nobanner --recursive /usr/local \
            | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
            | sort -u \
            | xargs -r apk info --installed \
            | sort -u \
)" \
&& apk add --virtual .rundeps $runDeps \
&& apk del .build-deps

RUN python manage.py compilemessages

Единственная проблема, с которой я сталкиваюсь - это пошаговая компиляция сообщений.,Здесь ошибка

CommandError: Can't find msgfmt. Make sure you have GNU gettext tools 0.15 or newer installed.

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Вот Dockerfile для apline3.8, который я использую в своем проекте, он работает для makemessages и compilemessages.

FROM python:3.6-alpine3.8

# postgresql-client is required by psql
# postgresql-dev musl-dev gcc are required by psycopg
# NOTE: there is py3-psycopg2
# linux-headers is required by uwsgi
# gettext-dev is required by ./manage.py makemessages

# TODO: optimize installation by using --virtual
RUN apk update && apk upgrade \
    && apk add postgresql-client \
        postgresql-dev \
        musl-dev \
        gcc \
        linux-headers \
        gettext-dev \
    && pip install pipenv

ENV PYTHONUNBUFFERED=1 \
    PYTHONIOENCODING=UTF-8

COPY docker/backend/docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]

WORKDIR /project/backend

COPY backend/Pipfile backend/Pipfile.lock /project/backend/

# TODO: use virtualenv?
RUN pipenv install --system --ignore-pipfile --dev
0 голосов
/ 05 марта 2019

Я знаю, что этот ответ старый, но надеюсь, что мой ответ поможет.

В начале вы создаете пакеты --virtual и устанавливаете их.Это отлично подходит для вашего контейнера, потому что он остается маленьким и чистым, но проблема здесь

&& apk del .build-deps

С помощью этой команды вы удаляете все виртуальные пакеты.Если gettext-dev был здесь

RUN apk add --no-cache --virtual .build-deps \
ca-certificates gcc postgresql-dev linux-headers musl-dev \
libffi-dev jpeg-dev zlib-dev gettext-dev\

Он также будет удален.Поэтому, если вы хотите, чтобы ваш пакет оставался внутри контейнера, вам необходимо добавить его после установки основных пакетов.

Например

FROM python:3.6-alpine
ENV PYTHONUNBUFFERED 1

# Creating working directory
RUN mkdir /code
WORKDIR /code

# Copying requirements
COPY ./myproject/ .

RUN apk add --no-cache --virtual .build-deps \
ca-certificates gcc postgresql-dev linux-headers musl-dev \
libffi-dev jpeg-dev zlib-dev \
&& pip install -r requirements.txt \
&& find /usr/local \
    \( -type d -a -name test -o -name tests \) \
    -o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
    -exec rm -rf '{}' + \
&& runDeps="$( \
    scanelf --needed --nobanner --recursive /usr/local \
            | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
            | sort -u \
            | xargs -r apk info --installed \
            | sort -u \
)" \
&& apk add --virtual .rundeps $runDeps \
&& apk del .build-deps

RUN apk add gettext-dev

RUN python manage.py compilemessages

Или вы можете удалить эту строку

&& apk del .build-deps

но это означает, что ваш контейнер будет намного больше.

0 голосов
/ 27 августа 2018

Вам нужно добавить gettext в файл Docker.Вы можете использовать: RUN apk add gettext для добавления этого.А по альпийскому пакету ссылка: https://pkgs.alpinelinux.org/package/edge/main/x86/gettext

...