xirixiz / dsmr-reader-docker

DSMR Reader in Docker.
https://hub.docker.com/r/xirixiz/dsmr-reader-docker
114 stars 33 forks source link

Owner of ./dsmrdb directory #109

Closed bikeymouse closed 4 years ago

bikeymouse commented 4 years ago

Even een vraag: ik gebruik de Docker-compose.yml van jouw voorbeeld.

Nu zie ik dat de owner van de ./dsmr directory door de container veranderd wordt naar een user met id "70".

De ./dmsrdb_backups directory blijft wel gewoon van user "pi" en group "pi":

drwx------ 19 70 pi 4.0K Apr 9 11:03 dsmrdb drwxr-xr-x 4 pi pi 4.0K Apr 9 11:12 dsmrdb_backups

Dit geeft problemen met rechten voor bijv. back-ups. Ik zou daarom graag willen dat de owner/group gewoon pi:pi blijft.

Ik heb in de Docker-compose nu deze toevoeging gedaan bij de environment, maar dat lijkt niets uit te maken: environment:

Is dit aan te passen?

xirixiz commented 4 years ago

Goed punt! Ik ga het uitzoeken....

xirixiz commented 4 years ago

Sorry, daar kan ik niet bij helpen. Je zou dan even moeten kijken wat de mogelijkheden zijn voor de postgres:10.5-alpine image op https://hub.docker.com/_/postgres

bikeymouse commented 4 years ago

Hi, dank voor de link, daar stond de oplossing op basis waarvan ik het heb kunnen fixen.

Voor de geïnteresseerde: je kunt dit doen door user: "1000:1000" toe te voegen aan je docker-compose.yml en daarbij read-only toegang te geven tot de /etc/passwd file op je systeem door de regel toe te voegen bij de volume sectie:

Thuurke commented 3 years ago

@bikeymouse zou je kunnen aangeven op welke plekken in de docker-compose.yml deze aanpassing moet komen?

bikeymouse commented 3 years ago

Hi,

Ik heb het zowel zowel voor de "dsmrdb" service als voor de "dsmr" service toegevoegd zie ik.

Ik heb voor de zekerheid ook onderstaande toevoeging nog laten staan in bij de environment, maar die worden dus mogelijk niet gebruikt door het script van xirixiz:

Let wel op dat die Id's overeenkomen met de user die je default gebruikt buiten de Docker-container.

Mijn volledige docker-compose.yml ziet er zo uit, als iemand nog aanvullingen/correcties hierop heeft hou ik me aanbevolen ;-)

(p.s. zie ook dat ik alle environment variabelen heb toegevoegd om de configuratie te sturen, inclusief als dat nog op de default waarden staat. Dat help om duidelijk te maken welke opties er zijn).


version: '3.8'

services:
  dsmrdb:
    image: postgres:12-alpine
    container_name: dsmrdb
    volumes:
      - ./dsmrdb:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
      - /etc/passwd:/etc/passwd:ro
    restart: unless-stopped
    user: "1000:1000"
    environment:
      - TZ=Europe/Amsterdam
      - PG_TZ=Europe/Amsterdam
      - POSTGRES_USER=dsmrreader
      - POSTGRES_PASSWORD=dsmrreader
      - POSTGRES_DB=dsmrreader
      - PUID=1000
      - PGID=1000
    ports:
      - 5432:5432
    networks:
      - dsmrdb

  dsmr:
    image: xirixiz/dsmr-reader-docker:latest
    container_name: dsmr
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./dsmrdb_backups:/dsmr/backups
    depends_on:
      - dsmrdb
    cap_add:
      - NET_ADMIN    
    networks:
      - dsmrdb
    restart: unless-stopped
    environment:
      - DATALOGGER_MODE=standalone
      - DATALOGGER_INPUT_METHOD=serial      # Required. Only serial or ipv4 (network) are valid values
      - DATALOGGER_SERIAL_PORT=/dev/ttyUSB0 # Required if the input method is set to serial
      - DATALOGGER_SERIAL_BAUDRATE=115200   # Required if the input method is set to serial

      - SD_LOGLEVEL=info
      - SD_USER=root
      - SD_GROUP=root

      - DSMR_LOGLEVEL=WARNING
      - DSMR_USER=dsmrreader
      - DSMR_PASSWORD=dsmrreader

      - DB_HOST=dsmrdb
      - DB_USER=dsmrreader
      - DB_PASS=dsmrreader
      - DB_NAME=dsmrreader
      - DB_PORT=5432

      - TZ=Europe/Amsterdam
      - DJANGO_TIME_ZONE=Europe/Amsterdam
      - VIRTUAL_HOST=localhost
      - PUID=1000
      - PGID=1000

    ports:
      - 7777:80
      - 7779:443
    devices:
      - /dev/P1-Meter:/dev/ttyUSB0

networks:
   dsmrdb:
     name: dsmrdb
Thuurke commented 3 years ago

Ik krijg met bovenstaand (behalve die 2 devices regels want ik gebruik een wifi reader) de volgende meldingen in de logs: Heb gebruiker pi en die heeft id 1000.

Als ik docker-compose up dsmrdb doe dan krijg ik het volgende dsmrdb | chmod: /var/lib/postgresql/data: Operation not permitted dsmrdb | chmod: /var/run/postgresql: Operation not permitted dsmrdb | initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted dsmrdb | The files belonging to this database system will be owned by user "pi". dsmrdb | This user must also own the server process. dsmrdb | dsmrdb | The database cluster will be initialized with locale "en_US.utf8". dsmrdb | The default database encoding has accordingly been set to "UTF8". dsmrdb | The default text search configuration will be set to "english". dsmrdb | dsmrdb | Data page checksums are disabled. dsmrdb | dsmrdb | fixing permissions on existing directory /var/lib/postgresql/data ... root@HomePiOne:/home/pi#

Doe ik een volledige docker-compose up -d dan krijg ik het volgende. Het is mij onduidelijk wat ik hier aan kan doen. ` [ INFO ] Verifying if the DSMR web credential variables have been set... [ INFO ] Fixing /dev/ttyUSB security... [ INFO ] Removing existing PID files... [ INFO ] Creating log directory... [ INFO ] Verifying Database connectivity... dsmr | Traceback (most recent call last): dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection dsmr | self.connect() dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(args, kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect dsmr | self.connection = self.get_new_connection(conn_params) dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(*args, kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection dsmr | connection = Database.connect(conn_params) dsmr | File "/usr/local/lib/python3.9/site-packages/psycopg2/init.py", line 127, in connect dsmr | conn = _connect(dsn, connection_factory=connection_factory, *kwasync) dsmr | psycopg2.OperationalError: could not translate host name "dsmrdb" to address: Name does not resolve dsmr | dsmr | dsmr | The above exception was the direct cause of the following exception: dsmr | dsmr | Traceback (most recent call last): dsmr | File "/dsmr/manage.py", line 10, in dsmr | execute_from_command_line(sys.argv) dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/init.py", line 401, in execute_from_command_line dsmr | utility.execute() dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/init.py", line 395, in execute dsmr | self.fetch_command(subcommand).run_from_argv(self.argv) dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 330, in run_from_argv dsmr | self.execute(args, cmd_options) dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 371, in execute dsmr | output = self.handle(*args, options) dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/shell.py", line 87, in handle dsmr | exec(options['command']) dsmr | File "", line 1, in dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(*args, *kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection dsmr | self.connect() dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/utils.py", line 90, in exit dsmr | raise dj_exc_value.with_traceback(traceback) from exc_value dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection dsmr | self.connect() dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(args, kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect dsmr | self.connection = self.get_new_connection(conn_params) dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(*args, kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection dsmr | connection = Database.connect(conn_params) dsmr | File "/usr/local/lib/python3.9/site-packages/psycopg2/init.py", line 127, in connect dsmr | conn = _connect(dsn, connection_factory=connection_factory, **kwasync) dsmr | django.db.utils.OperationalError: could not translate host name "dsmrdb" to address: Name does not resolve dsmr | [ FAIL ] Could not connect to database server. Exiting...

`

xirixiz commented 3 years ago

Hi,

Ik heb het zowel zowel voor de "dsmrdb" service als voor de "dsmr" service toegevoegd zie ik.

Ik heb voor de zekerheid ook onderstaande toevoeging nog laten staan in bij de environment, maar die worden dus mogelijk niet gebruikt door het script van xirixiz:

  • PUID=1000
  • PGID=1000

Let wel op dat die Id's overeenkomen met de user die je default gebruikt buiten de Docker-container.

Mijn volledige docker-compose.yml ziet er zo uit, als iemand nog aanvullingen/correcties hierop heeft hou ik me aanbevolen ;-)

(p.s. zie ook dat ik alle environment variabelen heb toegevoegd om de configuratie te sturen, inclusief als dat nog op de default waarden staat. Dat help om duidelijk te maken welke opties er zijn).


version: '3.8'

services:
  dsmrdb:
    image: postgres:12-alpine
    container_name: dsmrdb
    volumes:
      - ./dsmrdb:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
      - /etc/passwd:/etc/passwd:ro
    restart: unless-stopped
    user: "1000:1000"
    environment:
      - TZ=Europe/Amsterdam
      - PG_TZ=Europe/Amsterdam
      - POSTGRES_USER=dsmrreader
      - POSTGRES_PASSWORD=dsmrreader
      - POSTGRES_DB=dsmrreader
      - PUID=1000
      - PGID=1000
    ports:
      - 5432:5432
    networks:
      - dsmrdb

  dsmr:
    image: xirixiz/dsmr-reader-docker:latest
    container_name: dsmr
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./dsmrdb_backups:/dsmr/backups
    depends_on:
      - dsmrdb
    cap_add:
      - NET_ADMIN    
    networks:
      - dsmrdb
    restart: unless-stopped
    environment:
      - DATALOGGER_MODE=standalone
      - DATALOGGER_INPUT_METHOD=serial      # Required. Only serial or ipv4 (network) are valid values
      - DATALOGGER_SERIAL_PORT=/dev/ttyUSB0 # Required if the input method is set to serial
      - DATALOGGER_SERIAL_BAUDRATE=115200   # Required if the input method is set to serial

      - SD_LOGLEVEL=info
      - SD_USER=root
      - SD_GROUP=root

      - DSMR_LOGLEVEL=WARNING
      - DSMR_USER=dsmrreader
      - DSMR_PASSWORD=dsmrreader

      - DB_HOST=dsmrdb
      - DB_USER=dsmrreader
      - DB_PASS=dsmrreader
      - DB_NAME=dsmrreader
      - DB_PORT=5432

      - TZ=Europe/Amsterdam
      - DJANGO_TIME_ZONE=Europe/Amsterdam
      - VIRTUAL_HOST=localhost
      - PUID=1000
      - PGID=1000

    ports:
      - 7777:80
      - 7779:443
    devices:
      - /dev/P1-Meter:/dev/ttyUSB0

networks:
   dsmrdb:
     name: dsmrdb

Het gevaar is wel dat je er dan variabelen tussen hebt staan die niet meer bestaan cq gebruikt worden, zoals db_host, db_user, db_pass, etc. Ik zou even in de README kijken :)

xirixiz commented 3 years ago

Ik krijg met bovenstaand (behalve die 2 devices regels want ik gebruik een wifi reader) de volgende meldingen in de logs: Heb gebruiker pi en die heeft id 1000.

Als ik docker-compose up dsmrdb doe dan krijg ik het volgende dsmrdb | chmod: /var/lib/postgresql/data: Operation not permitted dsmrdb | chmod: /var/run/postgresql: Operation not permitted dsmrdb | initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted dsmrdb | The files belonging to this database system will be owned by user "pi". dsmrdb | This user must also own the server process. dsmrdb | dsmrdb | The database cluster will be initialized with locale "en_US.utf8". dsmrdb | The default database encoding has accordingly been set to "UTF8". dsmrdb | The default text search configuration will be set to "english". dsmrdb | dsmrdb | Data page checksums are disabled. dsmrdb | dsmrdb | fixing permissions on existing directory /var/lib/postgresql/data ... root@HomePiOne:/home/pi#

Doe ik een volledige docker-compose up -d dan krijg ik het volgende. Het is mij onduidelijk wat ik hier aan kan doen. ` [ INFO ] Verifying if the DSMR web credential variables have been set... [ INFO ] Fixing /dev/ttyUSB security... [ INFO ] Removing existing PID files... [ INFO ] Creating log directory... [ INFO ] Verifying Database connectivity... dsmr | Traceback (most recent call last): dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection dsmr | self.connect() dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(args, kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect dsmr | self.connection = self.get_new_connection(conn_params) dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(*args, kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection dsmr | connection = Database.connect(conn_params) dsmr | File "/usr/local/lib/python3.9/site-packages/psycopg2/init.py", line 127, in connect dsmr | conn = _connect(dsn, connection_factory=connection_factory, kwasync) dsmr | psycopg2.OperationalError: could not translate host name "dsmrdb" to address: Name does not resolve dsmr | dsmr | dsmr | The above exception was the direct cause of the following exception: dsmr | dsmr | Traceback (most recent call last): dsmr | File "/dsmr/manage.py", line 10, in dsmr | execute_from_command_line(sys.argv) dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/init.py", line 401, in execute_from_command_line dsmr | utility.execute() dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/init*.py", line 395, in execute dsmr | self.fetch_command(subcommand).run_from_argv(self.argv) dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 330, in run_from_argv dsmr | self.execute(args, cmd_options) dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 371, in execute dsmr | output = self.handle(*args, options) dsmr | File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/shell.py", line 87, in handle dsmr | exec(options['command']) dsmr | File "", line 1, in dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(*args, kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection dsmr | self.connect() dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/utils.py", line 90, in exit* dsmr | raise dj_exc_value.with_traceback(traceback) from exc_value dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection dsmr | self.connect() dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(args, kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect dsmr | self.connection = self.get_new_connection(conn_params) dsmr | File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner dsmr | return func(*args, kwargs) dsmr | File "/usr/local/lib/python3.9/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection dsmr | connection = Database.connect(conn_params) dsmr | File "/usr/local/lib/python3.9/site-packages/psycopg2/init.py", line 127, in connect dsmr | conn = _connect(dsn, connection_factory=connection_factory, **kwasync) dsmr | django.db.utils.OperationalError: could not translate host name "dsmrdb" to address: Name does not resolve dsmr | [ FAIL ] Could not connect to database server. Exiting...

`

Logisch, want wanneer de db niet kan starten, dan kan dsmr daar ook niet mee verbinden. Het probleem is een rechtenissue tussen het host systeem en de Docker volume mount. Je zal dat eerst moeten oplossen zodat dsmrdb fatsoenlijk kan starten, pas daarna kan je met dsmr aan de bak. Je zou er ook voor kunnen kiezen om Docker named volumes te gebruiken.

https://serverfault.com/questions/996785/docker-volumes-vs-mount-binds-what-are-the-use-cases

bikeymouse commented 3 years ago

Ik krijg met bovenstaand (behalve die 2 devices regels want ik gebruik een wifi reader) de volgende meldingen in de logs: Heb gebruiker pi en die heeft id 1000.

Als ik docker-compose up dsmrdb doe dan krijg ik het volgende dsmrdb | chmod: /var/lib/postgresql/data: Operation not permitted dsmrdb | chmod: /var/run/postgresql: Operation not permitted dsmrdb | initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted dsmrdb | The files belonging to this database system will be owned by user "pi". dsmrdb | This user must also own the server process. dsmrdb | dsmrdb | The database cluster will be initialized with locale "en_US.utf8". dsmrdb | The default database encoding has accordingly been set to "UTF8". dsmrdb | The default text search configuration will be set to "english". dsmrdb | dsmrdb | Data page checksums are disabled. dsmrdb | dsmrdb | fixing permissions on existing directory /var/lib/postgresql/data ... root@HomePiOne:/home/pi#

Mmm, heeft de pi user wel toegang tot de ./dsmrdb directory van DSMRDB? Misschien staat die user nog verkeerd van de vorige keer opstarten. Kun je wijzigen door chown -R pi:pi * te gebruiken.

Vaag overigens dat in je log wel wordt aangegeven (blijkbaar zonder resultaat): dsmrdb | dsmrdb | fixing permissions on existing directory /var/lib/postgresql/data ... root@HomePiOne:/home/pi#

Wat ik mij zelf nu echter afvroeg is waarom ik het extra command in de sectie voor de dsmrdb service heb gezet. Het probleem zat hem immers in de rechten voor de dsmrdb_backups directory, en die wordt door door de dsmr service aangemaakt.

Het is alleen al weer een tijd geleden inmiddels maak ik geen gebruik meer van de Raspberry Pi (draai nu Proxmox op een IntelNuC), en zie dat nu all backups "root" als eigenaar hebben. Gebruik nu ander backup mechanisme en heb er daarom geen last meer van. Heb nog wel even gekeken wat er gebeurt als ik user: "1000:1000" en een extra volume:

Kortom heb het maar even zo gelaten ;-)

De tip van xirixiz om named volumes te gebruiken is ook een goede, daarmee lost je het probleem ook op. Enige nadeeltje daaraan vindt ik dat de locatie van je databestanden wat moeilijker te vinden (en dus te back-uppen) is, omdat het dan ergens in een lange subdirectory-structuur onder Docker zit.

bikeymouse commented 3 years ago

Het gevaar is wel dat je er dan variabelen tussen hebt staan die niet meer bestaan cq gebruikt worden, zoals db_host, db_user, db_pass, etc. Ik zou even in de README kijken :)

Goede tip! ;-) Dat was inderdaad nogal verouderd, heb dat even opgeschoond.

Thuurke commented 3 years ago

heb bij de 2 ./ regels een extra dsmrreader mapje gezet zodat het in een submap komt. De hoofdmap en beide submappen hebben root als eigennaar. Dit is dus al anders omdat het eerst 70 was.

Ik heb ook maar een beetje opgeschoond aan variabelen...verder las ik in de readme :) dat ik de mode kon aanpassen. Heb dus ook ipv4 aangepast, maar dat lijkt mij niet meteen het probleem waarom het bij mij mis gaat.

blijf toch nog met dit zitten initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted dsmrdb | fixing permissions on existing directory /var/lib/postgresql/data ... chmod: /var/lib/postgresql/data: Operation not permitted dsmrdb | chmod: /var/run/postgresql: Operation not permitted

Thuurke commented 3 years ago

Nog wat geprobeerd met volumes maar bovenstaande melding blijft.

`

version: '3.8'

services:
  dsmrdb:
    image: postgres:12-alpine
    container_name: dsmrdb
    volumes:
      - data-progres:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
      - /etc/passwd:/etc/passwd:ro
    restart: unless-stopped
    user: "1000:1000"
    environment:
      - TZ=Europe/Amsterdam
      - PG_TZ=Europe/Amsterdam
      - POSTGRES_USER=dsmrreader
      - POSTGRES_PASSWORD=dsmrreader
      - POSTGRES_DB=dsmrreader
      - PUID=1000
      - PGID=1000
    ports:
      - 5432:5432
    networks:
      - dsmrdb

  dsmr:
    image: xirixiz/dsmr-reader-docker:latest
    container_name: dsmr
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - data-dsmrbackups:/dsmr/backups
    depends_on:
      - dsmrdb
    cap_add:
      - NET_ADMIN
    networks:
      - dsmrdb
    restart: unless-stopped
    environment:
      - DATALOGGER_MODE=standalone
      - DATALOGGER_INPUT_METHOD=ipv4      # Required. Only serial or ipv4 (network) are valid values
      - DATALOGGER_NETWORK_HOST=192.168.1.108     # Required if the input method is set to ipv4
      - DATALOGGER_NETWORK_PORT=23

      - TZ=Europe/Amsterdam
      - DJANGO_TIME_ZONE=Europe/Amsterdam
      - VIRTUAL_HOST=localhost
      - PUID=1000
      - PGID=1000

    ports:
      - 7777:80
      - 7779:443

networks:
   dsmrdb:
     name: dsmrdb

volumes:
  data-progres:
    driver: local
  data-dsmrbackups:
    driver: local
bikeymouse commented 3 years ago

Is “pi” wel owner van je data-progres map?

Thuurke commented 3 years ago

Volgens mij is het voordeel van named volumes dat je geen rechten zet. De "map" wordt ook door docker zelf toegekend (virtueel). Ik heb het teruggezet naar bind mounts. Mijn pi user is lid van de group homepi die heb ik recursief als group op de dsmrreader map gezet. pi heb ik recursief owner gemaakt en de rechten recursief op 775 gezet. Zodra ik docker-compose up -d doe veranderen de rechten van de db map naar 0700. Foutmelding blijft aan de containerkant mis gaan (als ik het goed interpreteer)

dsmrdb    | initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted
dsmrdb    | fixing permissions on existing directory /var/lib/postgresql/data ... chmod: /var/lib/postgresql/data: Operation not permitted
dsmrdb    | chmod: /var/run/postgresql: Operation not permitted
dsmrdb    | The files belonging to this database system will be owned by user "pi".
dsmrdb    | This user must also own the server process.
Thuurke commented 3 years ago

Overigens ik heb ook het docker image van conculega ualex73 geprobeerd en die start wel op met onderstaande code die vrijwel gelijk is aan zijn voorbeeld code. Al lukt daar het backuppen ook niet.

version: '3'
services:
  db-dsmr:
    image: postgres
    container_name: db-dsmr
    volumes:
      - ./dsmrreader/db:/var/lib/postgresql/data
    restart: unless-stopped
    environment:
      - POSTGRES_USER=dsmrreader
      - POSTGRES_PASSWORD=dsmrreader
      - POSTGRES_DB=dsmrreader
    networks:
      - net-dsmr

  dsmr:
    container_name: dsmr
    image: ualex73/dsmr-reader-docker
    container_name: dsmr
    restart: unless-stopped
    volumes:
      - ./dsmrreader/backups:/home/dsmr/app/backups
      - /dev:/dev
    environment:
      - DB_HOST=db-dsmr
      - DSMR_USER=admin
      - DSMR_EMAIL=root@localhost
      - DSMR_PASSWORD=admin
      - VIRTUAL_HOST=localhost
      - DSMRREADER_ADMIN_USER=admin
      - DSMRREADER_ADMIN_PASSWORD=password
    ports:
      - 8888:80
#    devices:
 #     - /dev/ttyUSB0:/dev/ttyUSB0
    networks:
      - net-dsmr

networks:
  net-dsmr:
    driver: bridge
xirixiz commented 3 years ago

Dat het wel lukt met de compose file van ualex staat hier los van, de config is appels met peren vergelijken door alle opgenomen extra settings. Hieronder een voorbeeld wat voldoende moet zijn voor het starten van PG12.. Er is een rechtenissue en wanneer je de config gelijk zou trekken vwb de database, hetzelfde resultaat zou moeten hebben.

Het probleem dat er nu ontstaat is dat ualex "latest" gebruikt voor postgres, de reden waarom backups aan de client kant niet werken. De PG13 client is namelijk niet beschikbaar voor de bronimage waar dsmr op draait, dus de client "begrijpt" de postgres omgeving niet waardoor er geen backup gemaakt kan worden. Dit is de reden waarom ik versie 12 van PG heb gedefinieerd in mijn compose file.

Het probleem dat jouw database niet start kan nu dus ook zijn dat PG12 jouw files niet "begrijpt". Wanneer met met de compose file van ualex start, dan is jouw database waarschijnlijk gebasseerd op PG13 en niet op PG12.

Ik zou de hele folder even verwijderen, opnieuw aanmaken (777) en de DB opstarten zoals in het onderstaande voorbeeld. Kijken of PG12 uberhaupt start zonder issues. Van daaruit zou ik het verder gaan onderzoeken.

Kortom weer wat werk en test mogelijkheden en hopelijk wat meer duidelijkheid :).

Hier zou je op een later moment, in geval van communicatie issues tussen de containers onderling nog even naar kunnen kijken: https://docs.docker.com/network/bridge/#enable-forwarding-from-docker-containers-to-the-outside-world

version: '3.8'

services:
  dsmrdb:
    image: postgres:12-alpine
    container_name: dsmrdb
    volumes:
      -  ./dsmrreader/db:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    environment:
      - TZ=Europe/Amsterdam
      - PG_TZ=Europe/Amsterdam
      - POSTGRES_USER=dsmrreader
      - POSTGRES_PASSWORD=dsmrreader
      - POSTGRES_DB=dsmrreader
    networks:
      - dsmrdb
xirixiz commented 3 years ago

Je kan ook eenvoudig beginnen met alleen een compose file die er bijv zo uit ziet:

version: '3.8'

volumes:
   pg-data:

services:
  database:
    image: postgres:latest
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      PGDATA: /pg-data
    ports:
      - "5432:5432"
    volumes:
      - pg-data:/pg-data
xirixiz commented 3 years ago

...hmm something other popped up. What is the underlying os you're using? selinux might be causing these permission issues as well...

More infor using the :z or :Z flag: https://www.redhat.com/sysadmin/user-namespaces-selinux-rootless-containers

Thuurke commented 3 years ago

ik draai raspian buster dus debian op de rpi. Je onderste database connectie ging goed. Die erboven met eerst de dsmrreader map en de db map aanmaken en op allebei 777 rechten en dan docker opstarten geeft dit in de logs

dsmrdb    | 1970-04-25 12:43:04.009 CET [1] LOG:  starting PostgreSQL 12.5 on arm-unknown-linux-musleabihf, compiled by gcc (Alpine 10.2.1_pre1) 10.2.1 20201203, 32-bit
dsmrdb    | 1970-04-25 12:43:04.009 CET [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
dsmrdb    | 1970-04-25 12:43:04.009 CET [1] LOG:  listening on IPv6 address "::", port 5432
dsmrdb    | 1970-04-25 12:43:04.009 CET [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
dsmrdb    | 1970-04-25 12:43:04.009 CET [1] LOG:  startup process (PID 21) was terminated by signal 11: Segmentation fault
dsmrdb    | 1970-04-25 12:43:04.009 CET [1] LOG:  aborting startup due to startup process failure
dsmrdb    | 1970-04-25 12:43:04.009 CET [1] LOG:  database system is shut down
dsmrdb    |
dsmrdb    | PostgreSQL Database directory appears to contain a database; Skipping initialization
dsmrdb    |
dsmrdb    | 1970-04-27 12:30:16.009 CET [1] LOG:  starting PostgreSQL 12.5 on arm-unknown-linux-musleabihf, compiled by gcc (Alpine 10.2.1_pre1) 10.2.1 20201203, 32-bit
dsmrdb    | 1970-04-27 12:30:16.009 CET [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
dsmrdb    | 1970-04-27 12:30:16.009 CET [1] LOG:  listening on IPv6 address "::", port 5432
dsmrdb    | 1970-04-27 12:30:16.009 CET [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
dsmrdb    | 1970-04-27 12:30:16.009 CET [1] LOG:  startup process (PID 23) was terminated by signal 11: Segmentation fault
dsmrdb    | 1970-04-27 12:30:16.009 CET [1] LOG:  aborting startup due to startup process failure
dsmrdb    | 1970-04-27 12:30:16.009 CET [1] LOG:  database system is shut down
dsmrdb    |
dsmrdb    | PostgreSQL Database directory appears to contain a database; Skipping initialization
dsmrdb    |
dsmrdb    | 1970-04-25 18:24:24.009 CET [1] LOG:  starting PostgreSQL 12.5 on arm-unknown-linux-musleabihf, compiled by gcc (Alpine 10.2.1_pre1) 10.2.1 20201203, 32-bit
dsmrdb    | 1970-04-25 18:24:24.009 CET [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
dsmrdb    | 1970-04-25 18:24:24.009 CET [1] LOG:  listening on IPv6 address "::", port 5432
dsmrdb    | 1970-04-25 18:24:24.009 CET [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
dsmrdb    | 1970-04-25 18:24:24.009 CET [1] LOG:  startup process (PID 21) was terminated by signal 11: Segmentation fault
dsmrdb    | 1970-04-25 18:24:24.009 CET [1] LOG:  aborting startup due to startup process failure
dsmrdb    | 1970-04-25 18:24:24.009 CET [1] LOG:  database system is shut down

image: postgres:12-alpine vervangen door image: postgres geeft

dsmrdb    |
dsmrdb    | PostgreSQL Database directory appears to contain a database; Skipping initialization
dsmrdb    |
dsmrdb    | 2021-01-31 12:14:35.310 CET [1] FATAL:  database files are incompatible with server
dsmrdb    | 2021-01-31 12:14:35.310 CET [1] DETAIL:  The data directory was initialized by PostgreSQL version 12, which is not compatible with this version 13.1 (Debian 13.1-1.pgdg100+1).
dsmrdb    |
dsmrdb    | PostgreSQL Database directory appears to contain a database; Skipping initialization
dsmrdb    |
dsmrdb    | 2021-01-31 12:14:37.972 CET [1] FATAL:  database files are incompatible with server
dsmrdb    | 2021-01-31 12:14:37.972 CET [1] DETAIL:  The data directory was initialized by PostgreSQL version 12, which is not compatible with this version 13.1 (Debian 13.1-1.pgdg100+1).
dsmrdb    |
dsmrdb    | PostgreSQL Database directory appears to contain a database; Skipping initialization
dsmrdb    |
dsmrdb    | 2021-01-31 12:14:40.782 CET [1] FATAL:  database files are incompatible with server
dsmrdb    | 2021-01-31 12:14:40.782 CET [1] DETAIL:  The data directory was initialized by PostgreSQL version 12, which is not compatible with this version 13.1 (Debian 13.1-1.pgdg100+1).

doe ik schoon en dan image: postgres dan krijg ik het zelfde bij de pg12 optie.

Doe ik weer alles schoon en image: postgres:latest

dsmrdb    |
dsmrdb    | 2021-01-31 12:34:18.781 CET [1] LOG:  starting PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on arm-unknown-linux-gnueabihf, compiled by gcc (Debian 8.3.0-6) 8.3.0, 32-bit
dsmrdb    | 2021-01-31 12:34:18.783 CET [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
dsmrdb    | 2021-01-31 12:34:18.783 CET [1] LOG:  listening on IPv6 address "::", port 5432
dsmrdb    | 2021-01-31 12:34:18.794 CET [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
dsmrdb    | 2021-01-31 12:34:18.814 CET [77] LOG:  database system was shut down at 2021-01-31 12:34:18 CET
dsmrdb    | 2021-01-31 12:34:18.839 CET [1] LOG:  database system is ready to accept connections

Wat opvalt is dat bij postgres 12 de datum en tijd van de logs alle kanten opvliegen. Bij de anderen is die gewoon actueel. Nu kijken of het dsmr gedeelte wil opstarten.

Thuurke commented 3 years ago

Ok met 13.1 lukt het wel om dsmr op te starten. Rechten op db map wordt dan ook 999 ipv 70 zoals het oorspronkelijk was met 12.1 Backups gaat echter nog niet. Rechten op dsmrreader map en op de backups map is: Group = root[0] Owner = root[0] octal = 0755 Op de db map is het: Group = root[0] Owner = 999[999] octal = 0700 Uitlezen van wifi p1-lezer op x.x.x.x met poort 23 lukt. Backup geeft melding: Backup creation failed, please check the dsmr_backend logfile.

Thuurke commented 3 years ago

Heb mijn originele dedicated dsmrreader installatie nog draaien (die ik dus in docker wil zetten samen met mij Home Assistant docker). Hier is het pad naar de backups: /home/dsmr/dsmr-reader/backups/archive/2021/01 waarvan de dsmr user owner is deze is in mijn docker dus vervangen door

Thuurke commented 3 years ago

gelukt om de dsmr_backend logfile te openen en daar vind ik dit.

[2021-01-31 15:38:03,139] CRITICAL - Unexpected exit code (1) for backup: b'could not find a "pg_dump" to execute\npg_dump: error: server version: 13.1 (Debian 13.1-1.pgdg100+1); pg_dump version: 12.5\npg_dump: error: aborting because of server version mismatch\n' [2021-01-31 15:38:03,153] ERROR (OSError) dsmr_backup.services.backup.run errored: b'could not find a "pg_dump" to execute\npg_dump: error: server version: 13.1 (Debian 13.1-1.pgdg100+1); pg_dump version: 12.5\npg_dump: error: aborting because of server version mismatch\n'

Begrijp ik het goed dat dsmr-reader 12.5 wil hebben maar die niet werkt op een rpi en door 13.1 te installeren vervolgens dsmr geen dump meer kan maken omdat de versie te nieuw is?

xirixiz commented 3 years ago

Dat begrijp je goed, dat is wat ik eerder aangaf. Op dit moment is er voor de base image van dsmr reader geen versie 13 beschikbaar van de PG client tools, alleen voor versie 12 of lager.

Thuurke commented 3 years ago

Oke ik heb het nu aangepast naar image: postgres:12 en dat lijkt het te doen. Kwam deze regel ergens tegen: If you click on those tags, you'll see the underlying Dockerfile. One is based on debian, the other on alpine, Raspian is debian dus niet alpine :)

xirixiz commented 3 years ago

Dat is de distro die als base gebruikt wordt in de Docker image, dat heeft geen enkele relatie met het host os, raspian in dit geval :). Het enige dat van belang is, is de architectuur van de host voor wat betreft de image die je nodig hebt.

Alpine wordt vaak gebruikt als base omdat het zeer klein is voor de basis van een Docker image.

Thuurke commented 3 years ago

Ik geloof je helemaal alleen als ik het onderstaande uitvoer dan is de owner van de db folder 999 en als ik postgres:12-alpine gebruik dan wordt dit 70. Ik heb de folder dsmrreader tussendoor verwijderd. Er lijkt dus toch verschil in te zitten (in iedergeval op mijn rpi). Ik zal het een tijdje laten draaien

version: '3.8'

services:
  dsmrdb:
    image: postgres:12
    container_name: dsmrdb
    volumes:
      - ./dsmrreader/db:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    environment:
      - TZ=Europe/Amsterdam
      - PG_TZ=Europe/Amsterdam
      - POSTGRES_USER=dsmrreader
      - POSTGRES_PASSWORD=dsmrreader
      - POSTGRES_DB=dsmrreader
    networks:
      - dsmrdb

  dsmr:
    image: xirixiz/dsmr-reader-docker:latest
    container_name: dsmr
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./dsmrreader/backups:/dsmr/backups
      - ./dsmrreader/logs:/var/log/supervisor
    depends_on:
      - dsmrdb
    cap_add:
      - NET_ADMIN
    networks:
      - dsmrdb
    restart: unless-stopped
    environment:
      - DATALOGGER_MODE=standalone
      - TZ=Europe/Amsterdam
      - DJANGO_TIME_ZONE=Europe/Amsterdam
      - VIRTUAL_HOST=localhost
    ports:
      - 7777:80
      - 7779:443

networks:
   dsmrdb:
     name: dsmrdb
xirixiz commented 3 years ago

Ah, oke, dat is wel interessant idd. Dat zou dan idd een afwijking zijn van de images van postgres. Ik zal er eens induiken en kijken of ik kan vinden waar het zit. Tenminste als de PG Dockerfiles inzichtelijk zijn, anders zouden we iig een issue kunnen aanmaken. Voor nu zou ik het dan idd hierbij laten en niet de Alpine image gebruiken.

xirixiz commented 3 years ago

Ik heb het inderdaad gezien nu, en er is daar ook een discussie over gaande. Een dirty hack is er ook om de uid en guid te zetten. Ik zou het persoonlijk niet gebruiken, maar dat is een persoonlijke keuze.

entrypoint: ["sh", "-c", "sed -e '/^postgres/s=^postgres:x:[0-9]*:[0-9]*:=postgres:x:${OWNER_UID}:${OWNER_GID}:=' -i /etc/passwd; sed -e '/^postgres/s=^postgres:x:[0-9]*:=postgres:x:${OWNER_GID}:=' -i /etc/group; exec docker-entrypoint.sh postgres"]
bikeymouse commented 3 years ago

Ik geloof je helemaal alleen als ik het onderstaande uitvoer dan is de owner van de db folder 999 en als ik postgres:12-alpine gebruik dan wordt dit 70. Ik heb de folder dsmrreader tussendoor verwijderd. Er lijkt dus toch verschil in te zitten (in iedergeval op mijn rpi). Ik zal het een tijdje laten draaien

version: '3.8'

services:
  dsmrdb:
    image: postgres:12
    container_name: dsmrdb
    volumes:
      - ./dsmrreader/db:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    environment:
      - TZ=Europe/Amsterdam
      - PG_TZ=Europe/Amsterdam
      - POSTGRES_USER=dsmrreader
      - POSTGRES_PASSWORD=dsmrreader
      - POSTGRES_DB=dsmrreader
    networks:
      - dsmrdb

  dsmr:
    image: xirixiz/dsmr-reader-docker:latest
    container_name: dsmr
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./dsmrreader/backups:/dsmr/backups
      - ./dsmrreader/logs:/var/log/supervisor
    depends_on:
      - dsmrdb
    cap_add:
      - NET_ADMIN
    networks:
      - dsmrdb
    restart: unless-stopped
    environment:
      - DATALOGGER_MODE=standalone
      - TZ=Europe/Amsterdam
      - DJANGO_TIME_ZONE=Europe/Amsterdam
      - VIRTUAL_HOST=localhost
    ports:
      - 7777:80
      - 7779:443

networks:
   dsmrdb:
     name: dsmrdb

Wat gebeurt er met de rechten van de ./dsmrreader/db folder als je in bij de dsmrdb sectie toevoegt: user: "1000:1000" en bij de volumes: - /etc/passwd:/etc/passwd:ro

Thuurke commented 3 years ago

@bikeymouse als ik die regels toevoeg dan krijg ik bij beide db images 12 en 12-alpine de onderstaande foutmelding. De owner van de db map is dan root.

dsmr      |
dsmr      | The above exception was the direct cause of the following exception:
dsmr      |
dsmr      | Traceback (most recent call last):
dsmr      |   File "/dsmr/manage.py", line 10, in <module>
dsmr      |     execute_from_command_line(sys.argv)
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
dsmr      |     utility.execute()
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 395, in execute
dsmr      |     self.fetch_command(subcommand).run_from_argv(self.argv)
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 330, in run_from_argv
dsmr      |     self.execute(*args, **cmd_options)
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 371, in execute
dsmr      |     output = self.handle(*args, **options)
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/shell.py", line 87, in handle
dsmr      |     exec(options['command'])
dsmr      |   File "<string>", line 1, in <module>
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
dsmr      |     return func(*args, **kwargs)
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
dsmr      |     self.connect()
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
dsmr      |     raise dj_exc_value.with_traceback(traceback) from exc_value
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
dsmr      |     self.connect()
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
dsmr      |     return func(*args, **kwargs)
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect
dsmr      |     self.connection = self.get_new_connection(conn_params)
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
dsmr      |     return func(*args, **kwargs)
dsmr      |   File "/usr/local/lib/python3.9/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
dsmr      |     connection = Database.connect(**conn_params)
dsmr      |   File "/usr/local/lib/python3.9/site-packages/psycopg2/__init__.py", line 127, in connect
dsmr      |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
dsmr      | django.db.utils.OperationalError: could not translate host name "dsmrdb" to address: Name does not resolve
bikeymouse commented 3 years ago

@bikeymouse als ik die regels toevoeg dan krijg ik bij beide db images 12 en 12-alpine de onderstaande foutmelding. De owner van de db map is dan root.

dsmr | django.db.utils.OperationalError: could not translate host name "dsmrdb" to address: Name does not resolve


Dat ziet er naar uit dat je zowel Postgress als DSMR start, waarbij deze melding lijkt aan te geven dat dat de dsmrdb-service niet bekend is c.q. de container niet opgestart is. Blijkbaar crashed DSMR dan ook.

Ik heb even een test gedaan met een verse virtual machine (in Proxmox) met daarop alleen Docker, docker-compose en Portainer geïnstalleerd. Daar heb alleen de Postgress 12 container gestart met de volgende docker-compose:

version: '3.6'

services:
  dsmrdb:
    image: postgres:10.5-alpine
    container_name: dsmrdb
    volumes:
      - ./dsmrdb:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
      - /etc/passwd:/etc/passwd:ro
    restart: unless-stopped
    user: "1000:1000"
    environment:
      - TZ=Europe/Amsterdam
      - POSTGRES_USER=dsmrreader
      - POSTGRES_PASSWORD=dsmrreader
      - POSTGRES_DB=dsmrreader
    ports:
      - 5432:5432
    networks:
      - dsmrdb
networks:
   dsmrdb:
     name: dsmrdb

Dat start prima op:

The files belonging to this database system will be owned by user "bikey".
This user must also own the server process.
...etc...
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok

etc...

2021-02-01 23:08:06.620 CET [1] LOG:  database system is ready to accept connections

De image herkent dus dat ik onder een andere user wil werken en past de rechten aan. Als ik tenslotte de ./dsrmdb directory bekijk en de gecreëerde bestanden hebben die allemaal prima de goede eigenaar:

bikey@test:~/dsmr/dsmrdb$ ls -lh
total 120K
-rw------- 1 bikey bikey    3 Feb  1 22:08 PG_VERSION
drwx------ 6 bikey bikey 4.0K Feb  1 22:08 base
drwx------ 2 bikey bikey 4.0K Feb  1 22:11 global
drwx------ 2 bikey bikey 4.0K Feb  1 22:08 pg_commit_ts
drwx------ 2 bikey bikey 4.0K Feb  1 22:08 pg_dynshmem
-rw------- 1 bikey bikey 4.5K Feb  1 22:08 pg_hba.conf
-rw------- 1 bikey bikey 1.6K Feb  1 22:08 pg_ident.conf
drwx------ 4 bikey bikey 4.0K Feb  1 22:10 pg_logical
drwx------ 4 bikey bikey 4.0K Feb  1 22:08 pg_multixact
drwx------ 2 bikey bikey 4.0K Feb  1 22:11 pg_notify
drwx------ 2 bikey bikey 4.0K Feb  1 22:08 pg_replslot
drwx------ 2 bikey bikey 4.0K Feb  1 22:08 pg_serial
drwx------ 2 bikey bikey 4.0K Feb  1 22:08 pg_snapshots
drwx------ 2 bikey bikey 4.0K Feb  1 22:11 pg_stat
drwx------ 2 bikey bikey 4.0K Feb  1 22:11 pg_stat_tmp
drwx------ 2 bikey bikey 4.0K Feb  1 22:08 pg_subtrans
drwx------ 2 bikey bikey 4.0K Feb  1 22:08 pg_tblspc
drwx------ 2 bikey bikey 4.0K Feb  1 22:08 pg_twophase
drwx------ 3 bikey bikey 4.0K Feb  1 22:08 pg_wal
drwx------ 2 bikey bikey 4.0K Feb  1 22:08 pg_xact
-rw------- 1 bikey bikey   88 Feb  1 22:08 postgresql.auto.conf
-rw------- 1 bikey bikey  23K Feb  1 22:08 postgresql.conf
-rw------- 1 bikey bikey   24 Feb  1 22:11 postmaster.opts
-rw------- 1 bikey bikey   94 Feb  1 22:11 postmaster.pid

Misschien is het dus een idee om het langzaam op te bouwen en eerst alleen de database container op te starten.