Po tym samouczku.

Zasadniczo mój problem polega na tym, że kiedy próbuję uruchomić określone polecenie, otrzymuję błąd uprawnień. To kończy wpływ na inne części mojego przepływu pracy, mimo że nie ma natychmiastowego wpływu.

Podczas pracy:

RUN pip install --upgrade pip
RUN pip install --no-cache /wheels/*

Dostaję:

WARNING: The directory '/home/app/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

WARNING: The directory '/home/app/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

A potem dziwnie, idę do biegu:

docker-compose -f docker-compose.prod.yml exec app python manage.py migrate --noinput

Dostaję dziwny błąd:

estimate_creator.TopLevelService.service_image: (fields.E210) Cannot use ImageField because Pillow is not installed.
        HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "python -m pip install Pillow".

Mam zainstalowany poduszkę, a nie ma problemu z nim w moim środowisku programistycznym.

Nie ma problemu, tylko go zainstaluję. Więc biegam:

docker-compose -f docker-compose.prod.yml exec app python -m pip install Pillow

I zobaczyć:

Requirement already satisfied: Pillow in /usr/local/lib/python3.8/site-packages (6.2.1)

Dobra ... próbuję odinstalować i zainstalować ponownie, otrzymuję ten traback:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/shutil.py", line 780, in move
    os.rename(src, real_dst)
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.8/site-packages/PIL/' -> '/tmp/pip-uninstall-opp36exc'

Jak myślisz?

Próbowałem komentować ostatnią linię Dockerfile, który zmienia użytkowników bez wpływu.

###########
# BUILDER #
###########

# pull official base image
FROM python:3.8.0-alpine as builder

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev zlib

#########
# Pillow #
#########

RUN apk add build-base python-dev py-pip jpeg-dev zlib-dev

#########
# Pillow #
#########

# install dependencies
COPY ./requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt


#########
# FINAL #
#########

# pull official base image
FROM python:3.8.0-alpine

# create directory for the app user
RUN mkdir -p /home/app

# create the app user
RUN addgroup -S app && adduser -S app -G app

# create the appropriate directories
ENV HOME=/home/app
ENV APP_HOME=/home/app/web
RUN mkdir $APP_HOME
WORKDIR $APP_HOME

# install dependencies
RUN apk update && apk add libpq
COPY --from=builder /usr/src/app/wheels /wheels
COPY --from=builder /usr/src/app/requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache /wheels/*

# copy project
COPY . $APP_HOME

# chown all the files to the app user
RUN chown -R app:app $APP_HOME

# change to the app user
USER app
1
Austin Peña 4 styczeń 2020, 01:31

1 odpowiedź

Najlepsza odpowiedź

Miałem ten sam problem z podobnym projektem. Aby znaleźć sprawę, że próbowałem importować obraz z PIL ({X0}}), a następnie śledzę brakujące libs z komunikatów o błędach. Ten DockerFile był wynikiem. (Używam obrazu opartego na Debianie, bo Alpine musisz znaleźć odpowiednie libs)

RUN apt-get update && apt-get install -y \
    libjpeg-dev \
    zlib1g-dev \
    libpng-dev \
    libopenjp2-7-dev \
    libtiff-dev \
0
shmn 20 styczeń 2020, 22:26