Tento problém je veľmi zvláštny. Stále úplne nerozumiem, čo presne sa stalo, ale môj mozog mi hovorí, že nejako docker-compose zmenil automatické generovanie názvov inštancií z používania podčiarkovníkov na pomlčky.
Nechcem to teraz ísť replikovať na živom serveri, ale podarilo sa mi dohľadať najrelevantnejšiu chybovú správu z histórie vyhľadávania:
ActiveRecord::NoDatabaseError: could not translate host name "mastodon_db_1" to address: Name or service not known
Čo to znamená?
Ako som sa sem dostal #
Naozaj neviem. Robil som nejakú údržbu servera okolo docker služieb a potom začali prichádzať chyby, dokonca aj z tých, ktorých som sa nedotkol. Teraz, keď sú všetky problémy vyriešené, cítim sa čudne, pretože veci fungujú, ale zjavne neviem presne prečo.
Na druhej strane, nikto nemôže vedieť všetko a bez odborného vzdelania som odkázaný na tinkrovanie a hacknutie sa cez docker svet. A znova, lekcie sa učia, kým veci začnú fungovať. Pozitívne je, že sa mi podarilo dostať všetko späť do normálu. Smutné je, že stále neviem, čo do čerta sa stalo.
Sledovanie problému #
Zjavná časť bola, že inštancia Mastodonu by sa neotvorila na webe s chybovým kódom HTTP 5xx. V docker logu boli rôzne opakujúce sa chyby, ale všetky vychádzali z vyššie uvedenej chybovej správy. No nemal som spôsob, ako vedieť, ktorá jedna chybová správa z toho múra textu je vinníkom.
Zjavná časť bola, že inštancia Mastodonu by sa neotvorila na webe s chybovým kódom HTTP 5xx. V docker logu boli rôzne opakujúce sa chyby, ale všetky vychádzali z vyššie uvedenej chybovej správy. No nemal som spôsob, ako vedieť, ktorá jedna chybová správa z toho múra textu je vinníkom.
Riešenie #
Našťastie som si tú chybovú správu všimol a to, čo hovorí, je vlastne dosť
jasné. Neexistuje žiadny hostiteľ s názvom mastodon_db_1, ku ktorému by
sa bolo možné pripojiť. Správne. Všetky ostatné chybové správy tam
pravdepodobne boli preto, lebo databáza nie je dostupná. Vedel som, že
služby sú definované v súbore docker-compose.yml. A rovnako dobre som
vedel, že to pár hodín predtým fungovalo. A vedel som, že sa tohto
priečinka vôbec nedotýkam, takže sa niečo iné zmenilo.
Zvlášť zarážajúce bolo, že služby docker-compose boli spustené odlišne — vo
forme mastodon-db-1. Ripgrepovanie po repozitári ma nakoniec priviedlo k
súboru .env.production, ktorý obsahoval hodnotu mastodon_db_1.
Riešenie?
- DB_HOST=mastodon_db_1
+ DB_HOST=mastodon-db-1
- REDIS_HOST=mastodon_redis_1
+ REDIS_HOST=mastodon-redis-1
- ES_HOST=mastodon_es_1
+ ES_HOST=mastodon-es-1
Podobné zmeny bolo potrebné urobiť aj v iných projektoch, takže verím, že niekde v docker ekosystéme musela byť nejaká aktualizácia, ale zatiaľ sa mi ju nepodarilo presne identifikovať. Vyhľadávanie neukazuje žiadnu breaking zmenu za posledný mesiac alebo dva. Možno nehľadám dostatočne usilovne…