web-dev-qa-db-ja.com

Docker composeがディレクトリを開けませんでしたアクセス許可が拒否されました

Dockerに関しては、私はまったくの初心者です。そして、私はそれをダミープロジェクトで理解しようとしています。 Djangoプロジェクトがあり、私のDockerfileはDjangoプロジェクトのルートフォルダにあります。そして私のdocker-compose.ymlファイルは、Djangoプロジェクトフォルダーとその他の構成ファイルを含むトップルートフォルダーの下にあります。

俺の docker-compose.yml

version: '3'
services:
  db:
    image: postgres
    container_name: dummy_project_postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data

  event_planner:
    build: ./dummy_project
    container_name: dummy_project
    volumes:
      - .:/web
    ports:
      - "8000:8000"
    depends_on:
      - db
    links:
      - db:postgres

と私のDockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /web
WORKDIR /web
ADD requirements.txt /web/
RUN pip install -r requirements.txt
ADD . /web/

次のコマンドを実行しようとしています

# stop and remove the existing containers
docker-compose stop
docker-compose rm -f

# up and run the container
docker-compose build
docker-compose up -d

docker-compose exec dummy_project bash

私がする時 docker-compose up -d、このエラーが表示されます。

docker-compose up -d                                                                         
dummy_project_postgres is up-to-date
Starting dummy_project ... done
warning: could not open directory 'data/db/': Permission denied

この質問は以前に尋ねられたのはわかっていますが、必要な解決策が十分に得られず、何時間も行き詰まっています。

編集:最上位のフォルダの下にあるすべてのフォルダに対するすべての権限があります
EDIT2:Sudo docker-compose up -dも同じエラーになります。

6
alexa

マウントしようとしています./data/db/var/lib/postgresql/dataそして非特権ユーザーでdocker-composeを実行しています。

したがって、2つの可能性があります。

  1. ./data/db権限に関する問題。
  2. / var/lib/postgresql/dataに関する問題

最も簡単な解決策は、特権ユーザー(root)でdocker-composeを実行することですが、それを実行したくない場合は、次のように試すことができます。

  • ./data/dbに権限を付与します(すでに行った編集が表示されます)。
  • / var/lib/postgresql/dataに権限を付与します

/ var/lib/postgresql/data権限をどのように付与できますか?次の行を読みます。

まず、/ var/lib/postgresql/dataはpostgre dockerによって自動生成されるため、これらの権限を変更する新しいDockerfileを定義する必要があります。その後、この新しいDockerfileを使用するようにdocker-composeも変更する必要があります。

./ docker-compose.yml

version: '3'
services:
  db:
    build: 
      context: ./mypostgres
      dockerfile: Dockerfile_mypostgres
    container_name: dummy_project_postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data

  event_planner:
    build: ./dumy_project
    container_name: dummy_project
    volumes:
      - .:/web
    ports:
      - "8000:8000"
    depends_on:
      - db
    links:
      - db:postgres

./ dumy_project/Dockerfile->変更なし

./ mypostgres/Dockerfile_mypostgres

FROM postgres
RUN mkdir -p /var/lib/postgresql/data
RUN chmod -R 777 /var/lib/postresql/data
ENTRYPOINT docker-entrypoint.sh
1
mulg0r