Изграждането на Docker-Compose е неуспешно [Permission Denied] с postgresql, освен ако не използва кеширан Dockerfile

Благодаря, че отделихте време да прочетете тази публикация!

В момента създавам приложение, което използва 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) публикации:

но уви, без резултат.

Използвам следните файлове:

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 за възпроизвеждане), моля, уведомете ме!


person A. Hartman    schedule 28.03.2021    source източник


Отговори (1)


Уверете се, че докерът принадлежи към вашите потребителски групи:

$ groups
$ foo adm cdrom sudo dip plugdev lpadmin lxd sambashare docker

Ако това не е така, опитайте да създадете докер група:

$ sudo groupadd docker 

Може да получите съобщението: groupadd: group 'docker' already exists

Страхотно, сега добавете вашия потребител към групата на докерите:

$ sudo usermod -aG docker $USER

Проверете дали докерът принадлежи към вашата потребителска група:

$ groups
$ docker adm cdrom sudo dip plugdev lpadmin lxd sambashare foo

Най-вероятно трябва да излезете и да влезете отново.

Дори ако след това докерът не е посочен сред групите, към които вашият потребител принадлежи, за да опитате:

$ newgrp docker
person Raphael Silva    schedule 01.04.2021