web-dev-qa-db-fra.com

Docker compose n'a pas pu ouvrir l'autorisation de répertoire refusée

Je suis totalement novice en ce qui concerne Docker. Et j'essaie de le comprendre avec un projet factice. J'ai un projet Django et mon Dockerfile se trouve dans le dossier racine du projet Django. Et mon docker-compose.yml le fichier se trouve sous le dossier racine supérieur qui contient Django et autres fichiers de configuration.

mon 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

et mon Dockerfile

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

J'essaie d'exécuter les commandes suivantes

# 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

Quand je fais docker-compose up -d, Je vois cette erreur.

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

Je sais que cette question a été posée auparavant, mais je n'ai pas tout à fait obtenu la solution dont j'ai besoin et je suis coincé depuis des heures maintenant.

EDIT: J'ai toutes les autorisations pour tous les dossiers sous le dossier supérieur
EDIT2:Sudo docker-compose up -d entraîne également la même erreur.

6
alexa

Vous essayez de monter ./data/db dans /var/lib/postgresql/data et vous exécutez docker-compose avec un utilisateur non privilégié.

Donc, nous pouvons avoir deux possibilités:

  1. Problème avec les autorisations ./data/db.
  2. Problème avec/var/lib/postgresql/data

La solution la plus simple consiste à exécuter docker-compose avec un utilisateur privilégié (root), mais si vous ne voulez pas le faire, vous pouvez essayer ceci:

  • Donnez des autorisations à ./data/db (je vois votre EDIT que vous l'avez déjà fait).
  • Accordez des autorisations à/var/lib/postgresql/data

Comment pouvez-vous accorder des autorisations/var/lib/postgresql/data? Lisez les lignes suivantes:

Tout d'abord, notez que/var/lib/postgresql/data est généré automatiquement par le docker postgre, vous devez donc définir un nouveau Dockerfile qui modifie ces autorisations. Après cela, vous devez également modifier docker-compose pour utiliser ce nouveau Dockerfile.

./ 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 -> Sans modifications

./ 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