DEV Community

Andy Allison
Andy Allison

Posted on

4 1

Postgres, Docker and Windows

This has had me tearing my hair out for a fair old chunk of time.

The main issue was I wanted to spin up a simple container with postgres in it for a little dev project I'm playing with. Historically I've used Heroku but I wanted to be a good modern dev and slam some containers about the boat.

The initial article I found had a few decent bits in it but I did run into issues straight away.

The first one was that I needed to sort the Docker for windows sharing out.
cloud app

Docker Settings (TaskBar Tray) > Resources > File Sharing > C:
This then requested my admin user and password to allow permissions.

Next I set up the docker-compose.yml file. This in itself caused a number of permissions problems.

version: "3"
services:
#  Create a service named db.
  db:
#   Use the Docker Image postgres. This will pull the newest release.
    image: "postgres"
#   Give the container the name my_postgres. You can changes to something else.
    container_name: "localpg"
#   Setup the username, password, and database name. You can changes these values.
    environment:
      - POSTGRES_USER=john
      - POSTGRES_PASSWORD=pwd0123456789
      - POSTGRES_DB=mydb
#   Maps port 54320 (localhost) to port 5432 on the container. You can change the ports to fix your needs.
    ports:
      - "54320:5432"
#   Set a volume some that database is not lost after shutting down the container.
#   I used the name postgres-data but you can changed it to something else.
    volumes:
      - postgresql-volume:/var/lib/postgresql/data
volumes: 
  postgresql-volume:
    external: true

The main errors being

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 20
selecting default shared_buffers ... 400kB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
2019-10-17 16:09:15.251 UTC [77] FATAL:  data directory "/var/lib/postgresql/data" has wrong ownership
2019-10-17 16:09:15.251 UTC [77] HINT:  The server must be started by the user that owns the data directory.
child process exited with exit code 1
initdb: removing contents of data directory "/var/lib/postgresql/data"

What I found with this was you needed to create a volume for docker as it just doesn't seem to play nice with the windows file system at its rawest.

This involved running this command.

$ docker volume create --name=postgresql-volume

And making sure this was in my compose file

volumes: 
  postgresql-volume:
    external: true

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (1)

Collapse
 
vyrru5 profile image
VyRru5

Perfect, my friend as this problem, we are fixed with this method, thanks a lot.
I think it was docker agent in windows wtih low permissions.

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs