Благодаря, че отделихте време да прочетете тази публикация!
В момента създавам приложение, което използва Python, Flask, Docker, Docker-compose и Postgres на Ubuntu 18.04 LTS. Преди това изграждането на docker-compose щеше да успее и всичко работеше по план. Сега обаче, когато преминах към друг Dockerfile и вече не използвам кешираната версия на предишния Dockerfile, компилацията прекъсва със следната грешка:
PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.7/__pycache__/__future__.cpython-37.pyc.140409285875056'
dpkg: error processing package python3.7-minimal (--configure):
installed python3.7-minimal package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
python3.7-minimal
Опитах следните (Stackoverflow) публикации:
- PermissionError: [Errno 13] Разрешението е отказано: ' /usr/lib/python3.5/site-packages' инсталиране на Django
- docker-compose, PermissionError: [Errno 13] Разрешението е отказано: ' /manage.py'
- Как да промените разрешенията за папка и нейните подпапки/файлове в една стъпка?
- неуспешно инсталиране на pip с: OSEror: [Errno 13 ] Отказано разрешение за директория
- docker-compose up && docker-compose build: грешка с PostgreSQL
- https://phoenixnap.com/kb/fix-sub-process-usr-bin-dpkg-returned-error-code-1
но уви, без резултат.
Използвам следните файлове:
Dockerfile.prod
# pull official base image
FROM python:3.9.0-slim-buster
# set working directory
WORKDIR /usr/src/app
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV FLASK_ENV production
ENV APP_SETTINGS src.config.ProductionConfig
# install system dependencies
RUN apt-get update \
&& apt-get -y install netcat gcc postgresql\
&& apt-get clean
# add and install requirements
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# add app
COPY . .
# add and run as non-root user
RUN adduser --disabled-password myuser
USER myuser
# run gunicorn
CMD gunicorn --bind 0.0.0.0:$PORT manage:app
docker-compose.yml
version: '3.8'
services:
api:
build:
context: .
dockerfile: Dockerfile.prod
entrypoint: ['/usr/src/app/entrypoint.sh']
volumes:
- .:/user/src/app
ports:
- 5004:5000
environment:
- FLASK_ENV=development
- APP_SETTINGS=src.config.DevelopmentConfig
- DATABASE_URL=postgresql://postgres:postgres@api-db:5432/api_dev
- DATABASE_TEST_URL=postgresql://postgres:postgres@api-db:5432/api_test
depends_on:
- api-db
api-db:
build:
context: ./src/db
dockerfile: Dockerfile
expose:
- 5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
./src/db/Dockerfile
FROM postgres:13-alpine
ADD create.sql /docker-entrypoint-initdb.d
Благодаря още веднъж, че отделихте време да прочетете този въпрос и ако е необходима допълнителна информация (напр. минимална жизнеспособна програма Flask за възпроизвеждане), моля, уведомете ме!