簡體   English   中英

Docker-Compose 構建失敗 [Permission Denied] postgresql 除非它使用緩存的 Dockerfile

[英]Docker-Compose build fails [Permission Denied] with postgresql unless it uses a cached Dockerfile

感謝您花時間閱讀這篇文章!

I'm currently building an application that makes use of Python, Flask, Docker, Docker-compose and Postgres on 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 程序重現)請告訴我!

確保 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM