Docker + Timezone

1

Cześć, mam problem.
Stawiam sobie postgresa na dockerze i nie moge ustawić poprawnie timezone
docker-compose.yaml:

version: "3.8"

services:
  postgres_db:
    image: postgres:latest
    container_name: budget_manager_postgres
    network_mode: bridge
    ports:
      ["5432:5432"]
    env_file:
      - postgres.env

Plik env:

POSTGRES_DB=budget_manager
POSTGRES_USER=jvm
POSTGRES_PASSWORD=tajne_haslo
TZ=Europe/Warsaw

Niestety SELECT current_time zwraca nieprawidłową godzinę, jak to naprawić?
@damian-szkoladockera możesz sie wykazać :D

1

A kontener świeży? Bo jak już raz odpaliłes to on siebie nie skonfiguruje ponownie

0

Tak, usuwałem kontener, nawet na wszelki wypadek obraz postgresa :D
Nic to nie dało :(

0

Mueh okazuje się że komenda date w bashu kontenera zwraca prawidłowa datę po zmianach, to coś nie tak z postgresem.

1

Nie używasz przypadkiem Dockera na Windowsie i jednocześnie "usypiasz" go a następnie "budzisz" i wracasz do pracy ze swoim Dockerem?

Jeśli tak to może to Ci pomoże: https://forums.docker.com/t/docker-for-windows-should-resync-vm-time-when-computer-resumes-from-sleep/17825

Edit: nie doczytałem, że chodzi o Timezone... więc pewnie nie to ;)

4

Szczerze, to nie przejmować się strefą czasową DB i zawsze składować dane w UTC. A jeśli trzeba to składować TZ w osobnej kolumnie (lub jako typ złożony).

1

@scibi92:

Hmm... Nie muszę się wykazywać 🙄

Spróbuj jednak dorzucić jeszcze jedną zmienną środowiskową PGTZ i ustaw jej taką samą wartość jak TZ

Jak by dalej coś było nie tak, to upewnij się że faktycznie wartość tej zmiennej środowiskowej jest ustawiana w kontenerze - polecenie docker container inspect <id_lub_nazwa_kontenera

0

@damian-szkoladockera:

No niestety:

 "TZ=Europe/Warsaw",
 "PGTZ=Europe/Warsaw",

Funkcje czasu z postgresa zwracają inne dane niż komenda date wykonywana z basha kontenera :(

1

Czy robiłeś docker container inspect ?

Wyczyść też volumeny i sprawdź raz jeszcze. Od jakiegoś czasu volumen dla Postgresa tworzy się automatycznie ( nawet jak tego nie wyspecyfikujesz). Odpowiada za to instrukcja VOLUME w pliku Dockerfile.

A jeśli nic z tych rzeczy nie pomogło to może to być błąd w samym obrazie Postgresa.

W obrazach postgresa, jest skrypt docker-entrypoint.sh, który jest odpalany, zanim jeszcze uruchomi się sam postgres.

Jego zadaniem jest min. zainicjalizowanie konfiguracji.

Ja sprawdzilbym, (docker container exec) czy w kontenerze - w pliku postgres.conf jest taki timezone, jak podajesz w zmiennej środowiskowej

1 użytkowników online, w tym zalogowanych: 0, gości: 1