Varför återgår en containerbaserad app till UTC först efter en bilduppdatering?

Eva Wong är Teknisk skribent och den boende fixaren på ZimaSpace. En livslång nörd med en passion för hemma-labb och öppen källkod, hon specialiserar sig på att översätta komplexa tekniska koncept till tillgängliga, praktiska guider. Eva tror att självhosting ska vara roligt, inte skrämmande. Genom sina handledningar ger hon gemenskapen verktyg att avmystifiera hårdvaruinstallationer, från att bygga sin första NAS till att bemästra Docker-containrar.

En containeriserad app kan återgå till UTC efter en uppdatering när den nya avbildningen tar bort tidszonsdata, ignorerar TZ eller inte längre använder värddatorns monterade tidszon.

Värddatorns klocka kan förbli korrekt medan programmet formaterar datum i UTC, eftersom containrar normalt delar värddatorns kärnklocka men har egna tidszonsfiler, miljövariabler och data för språkkörningen. En uppdatering av avbildningen kan byta basdistribution, ta bort tzdata, ändra programanvändaren, ersätt startpunkten eller slutar följa en leverantörsspecifik TZ variabeln. Jämför den gamla och den nya avbildningen innan du ändrar värddatorns tidszon.

Separera systemklockans tid från tidszonsformatering

Anteckna UTC-tid, lokalt formaterad tid, tidszonsnamn, numerisk förskjutning och programmets egen visade tid i de gamla och nya containrarna.

GNU C Library förklarar att variabeln TZ styr konvertering till lokal tid, medan den underliggande systemklockan fortfarande är en källa till absolut tid.

Om epoktiden överensstämmer men den formaterade tidszonen ändras, beror problemet på tidszonskonfigurationen och inte på klockdrift eller NTP.

Kontrollera om den nya avbildningen fortfarande innehåller tzdata

Jämför installerade paket, /usr/share/zoneinfo, /etc/localtime, och /etc/timezone mellan de föregående och aktuella avbildningstaggarna.

Debians tzdata-paket tillhandahåller tidszonsdefinitioner som program använder för att konvertera UTC till regional lokal tid.

En minimal ersättningsavbildning kan avsiktligt utelämna det här paketet. Installera det i en härledd avbildning eller använd programmets stödda mekanism för tidszoner i stället för att manuellt ändra en körande container.

Verifiera hur basdistributionen tillämpar tidszon

Identifiera om avbildningen är Debian, Ubuntu, Alpine, distroless eller någon annan bas. Anta inte att inställningen TZ har identiska effekter i alla avbildningar.

Alpine Linux dokumenterar konfiguration av tidszon via tzdata och zoneinfo.

Om uppdateringen ändrade basavbildningen upprepar du tidszonskonfigurationen med den distributionens metod som stöds. Om du kopierar en enda fil från den gamla containern kan reglerna för sommartid bli inaktuella.

-15% OFF
Single board computer zimaboard2

Kontrollera värdens bind-montering för localtime

Jämför den körande containerns monteringar före och efter återskapandet. Kontrollera om /etc/localtime eller så är en zoneinfo-fil fortfarande monterad skrivskyddad.

Dockers bind-monteringar mappar en exakt värdfil eller värdkatalog till containern. Den officiella vägledningen om bind-monteringar visar varför en borttagen Compose-montering eller ändrad källsökväg gör att den nya containern återgår till sin standardinställning från avbildningen.

Montera inte värdens hela /etc katalog. Använd den begränsade fil eller uttryckliga tidszonskonfiguration som programmet kräver.

Kontrollera körningsmiljöns egen tidszonsdatabas

Identifiera om programmet använder operativsystemets zoneinfo-databas eller inkluderar tidszonsdata i Python, Java, PHP, Node.js eller en annan körtidsmiljö.

Pythons zoneinfo-modul söker i systemdata eller ett tzdata-paket.

Ett program kan därför visa UTC även när skalkommandon visar rätt tidszon. Jämför programmets körningsbeteende separat från containerns skal.

Verifiera Compose-miljövariablernas prioritet efter återskapandet

Inspektera den återskapade containerns slutliga miljö och jämför den med Compose-interpoleringen, miljö, env_file, och standardvärden för bilder.

Reds Hats containerdokumentation påpekar att konfiguration vid körning kan åsidosätta avbildningens miljö, så en uppdaterad avbildning och en gammal distributionsfil kan ge ett annat slutvärde än förväntat.

Läs den faktiska containermiljön i stället för att bara läsa Compose-filen. Ett inaktuellt stackgränssnitt eller en alternativ env-fil kan ha återskapat tjänsten utan den avsedda tidszonsvariabeln.

Lås fast konfigurationen och testa efter ytterligare en uppdatering

Välj en tidszonsmetod som stöds, lås fast den i versionshanterad distributionskonfiguration, återskapa containern och verifiera vinter- och sommartidsdatum där det är tillämpligt.

ZimaSpace-artikeln om tiden för containerjobb och miljön beskriver den angränsande diagnostiska gränsen för scheman som ändras när containerns tidszonsinställningar ändras.

Problemet är löst när applikationen, skalet, loggarna och de schemalagda jobben använder den avsedda tidszonen efter omstart och ytterligare en kontrollerad återskapning av avbildningen.

Vanliga frågor

Har containrar en egen hårdvaruklocka?

Nej. De delar normalt värdkärnans klocka, men kan formatera tiden med olika tidszonsdata och miljöinställningar.

Räcker det alltid att ange TZ?

Nej. Avbildningen och applikationen måste ha stöd för variabeln och åtkomst till tidszonsregler. Vissa körmiljöer använder en separat medföljande databas.

Bör jag ändra tidszonen på NAS-värden för att åtgärda en enda container?

Nej. Korrigera först konfigurationen av containern eller applikationen. Att ändra värden på värden kan påverka loggar, scheman och alla andra tjänster.

Support och tips

Mer att läsa

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.