web-dev-qa-db-fra.com

Le conteneur Docker s'arrête en donnant l'erreur `` Le répertoire de données a une mauvaise propriété '' lorsqu'il est exécuté dans Windows 10

J'ai mon docker installé dans Windows. J'essaie d'installer cette application. Il m'a donné le fichier docker-compose.yml suivant:

version: '2'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile-nginx
    ports:
    - "8085:80"
    networks:
      - attendizenet
    volumes:
      - .:/usr/share/nginx/html/attendize
    depends_on:
      - php
  php:
    build:
      context: .
      dockerfile: Dockerfile-php
    depends_on:
      - db
      - maildev
      - redis
    volumes:
      - .:/usr/share/nginx/html/attendize
    networks: 
      - attendizenet
  php-worker:
    build:
      context: .
      dockerfile: Dockerfile-php
    depends_on:
      - db
      - maildev
      - redis
    volumes:
      - .:/usr/share/nginx/html/attendize
    command: php artisan queue:work --daemon
    networks:
      - attendizenet
  db:
    image: postgres
    environment:
      - POSTGRES_USER=attendize
      - POSTGRES_PASSWORD=attendize
      - POSTGRES_DB=attendize
    ports:
      - "5433:5432"
    volumes:
      - ./docker/pgdata:/var/lib/postgresql/data
    networks:
    - attendizenet
  maildev:
    image: djfarrelly/maildev
    ports:
      - "1080:80"
    networks:
      - attendizenet
  redis:
    image: redis
    networks:
      - attendizenet

networks:
  attendizenet:
    driver: bridge

Toute l'installation se passe bien, mais le conteneur PostgreSQL s'arrête après avoir indiqué pendant un moment donner l'erreur suivante.

2018-03-07 08:24:47.927 UTC [1] FATAL:  data directory "/var/lib/postgresql/data" has wrong ownership
2018-03-07 08:24:47.927 UTC [1] HINT:  The server must be started by the user that owns the data directory

Un simple conteneur PostgreSQL de Docker Hub fonctionne sans problème, mais l'erreur se produit lorsque nous essayons d'attacher un volume au conteneur.

Je suis nouveau dans Docker, veuillez donc ignorer l'utilisation incorrecte des termes.

10
sphinx

Il s'agit d'un problème documenté avec l'image Postgres Docker sous Windows [ 1 ] [ 2 ] [] [ 4 =]. Actuellement, il ne semble pas y avoir de moyen de monter correctement les répertoires Windows en tant que volumes. Vous pouvez utiliser à la place un volume Docker persistant, par exemple:

  db:
    image: postgres
    environment:
      - POSTGRES_USER=attendize
      - POSTGRES_PASSWORD=attendize
      - POSTGRES_DB=attendize
    ports:
      - "5433:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
    - attendizenet

volumes:
  pgdata:

Autres choses qui n'ont pas fonctionné:

    environment:
      - PGDATA=/var/lib/postgresql/data/mnt
    volumes:
      - ./pgdata:/var/lib/postgresql/data
  • Utiliser un Bind Mount (docker-compose 3.2)
    volumes:
      - type: bind
        source: ./pgdata
        target: /var/lib/postgresql/data
  • Exécution en tant que POSTGRES_USER = root

Plus d'information:

GitHub

Forums Docker

6
Thomas Taylor

Même j'ai eu le problème que j'ai dû copier le répertoire de données à intervalles réguliers.

 docker cp <container-name>:/var/lib/postgresql/data C:/docker/volumes/postgres
0
Viyaan Jhiingade