Docker-Compose构建PostgreSQL时遇到权限拒绝错误,除非使用缓存的Dockerfile。

5

感谢您抽出时间阅读本篇文章!

我目前正在构建一个应用程序,其中使用了Python、Flask、Docker、Docker-compose和Ubuntu 18.04 LTS上的Postgres。以前,docker-compose build会成功,并且一切都按计划进行。但是,现在我切换到另一个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 程序),请告诉我!


1
你解决过这个问题吗? 我遇到了完全相同的问题,而且这篇帖子和https://stackoverflow.com/q/67937163/13579256是我能找到的唯一与`python3.7-minimal`问题相关的地方。 - ReetS
1个回答

0

确保 Docker 属于您的用户组:

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

如果不是这种情况,请尝试创建一个docker组:
$ sudo groupadd docker 

你可能会收到这个消息:groupadd: group 'docker' already exists 现在很棒,将您的用户添加到docker组中:
$ sudo usermod -aG docker $USER

检查 Docker 是否属于您的用户组:

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

你很可能需要注销并重新登录。

即使在那之后,docker仍未列入您的用户所属的群组,请尝试:

$ newgrp docker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接