I have my docker installed in Windows. I am trying to install this application. It has given me the following docker-compose.yml file:
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
All the installation goes well, but the PostgreSQL container stops after starting for a moment giving following error.
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
A simple PostgreSQL container from Docker Hub works smoothly, but the error occurs when we try to attach a volume to the container.
I am new to docker, so please ignore usage of terms wrongly.
Restarting the Docker Engine If running elevated Docker commands does not fix the permission denied error, verify that your Docker Engine is running. Similar to running a docker command without the sudo command, a stopped Docker Engine triggers the permission denied error.
This optional variable can be used to define another location - like a subdirectory - for the database files. The default is /var/lib/postgresql/data .
Docker has two options for containers to store files on the host machine, so that the files are persisted even after the container stops: volumes, and bind mounts. Docker also supports containers storing files in-memory on the host machine. Such files are not persisted.
This is a documented problem with the Postgres Docker image on Windows [1][2][3][4]. Currently, there doesn't appear to be a way to correctly mount Windows directories as volumes. You could instead use a persistent Docker volume, for example:
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:
Other things that didn't work:
environment: - PGDATA=/var/lib/postgresql/data/mnt volumes: - ./pgdata:/var/lib/postgresql/data
volumes: - type: bind source: ./pgdata target: /var/lib/postgresql/data
More Information:
GitHub
Docker Forums
Please refer reinierkors' answer from here. The answer is as follows copied as is from the link here for reader's convenience and works for me
I solved this by mapping my local volume one directory below the one Postgres needs:
version: '3' services: postgres: image: postgres restart: on-failure environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=password - PGDATA=/var/lib/postgresql/data/pgdata - POSTGRES_DB=postgres volumes: - ./postgres_data:/var/lib/postgresql ports: - 5432:5432
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With