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