Docker: ho riscontrato un problema su Windows 10
Dov’è la novita? Windows per noi sviluppatori è un problema! Perchè?
- Perchè è un sistema operativo completamente case insensitive per i nomi di file e cartelle (questa la sapevi?);
- perchè in Windows non esistono gli hard link;
- il terminale in Windows è un optional;
- altre varie ed eventuali.
Capiamoci, non sono un fanboy, utilizzo Windows per altri scopi e va più che bene, ma non riesco ad apprezzarlo “lavorativamente”.
In ogni caso, per tutta una serie di motivi, mi sono visto costretto ad utilizzare una macchina Windows. Quindi mi metto in postazione, procedo al downlaod di Docker per Windows e continuo con l’installazione. Alla fine della procedura mi chiede di riavviare, fin qui tutto ok!
Riavvio
Al ritorno dal riavvio speravo di aver concluso.. Mi sbagliavo. Non ho ben capito da quale versione in poi, ma pare che adesso Docker su Windows funziona solo con WSL 2 (Windows subsystem for Linux), la release che avevo installata era la 1904 (che a quanto pare non supporta WSL 2). Va bene: “Impostazioni -> Aggiornamenti -> Cerca aggiornamenti” e gli faccio installare la versione 2004 (ed ha impiegato circa un’ora).
Svariati riavvii dopo
Ok spero di essere davvero pronto stavolta! (spoiler: mi sbagliavo) Accedo al desktop, apro Docker e mi dice che ha già provveduto ad attivare WSL per me (ma che bravo ❤️) però devo installare io manualmente un altro componente (almeno mi dà il link per scaricarlo, cerco di non lamentarmi troppo). Scarico, installo.
Riavvio ancora una volta
Per fortuna stavolta sono davvero pronto (diversamente mi sarei davvero alterato). Tiro giù il mio progetto da GitHub, vado di Powershell e:
docker-compose up -d
Attendo qualche istante, apro il browser e.. Niente, non funziona. Decido di attendere qualche altro istante prima di capire cosa stesse accadendo, cerco di non preoccuparmi troppo. Niente.
Ricominciamo
docker-compose down --volume
Stavolta avvio il tutto senza il -d
e noto che il container del database PostgreSQL parte tranquillamente,
è quello con Python ed il mio codice Django che “moriva”, con un codice di errore che proprio non conoscevo.
Sinceramente prima di googlare l’errore ho pensato ad un mio errore di scrittura (anche se su Linux e MacOS lo stesso
codice funziona correttamente). Niente, dopo l’ennesimo check, l’errore è ancora lì.
Inizio a cercare un po' sul mio amico fidato StackOverflow e trovo questo (che non c’entra niente con Docker ma era esattamente il problema che riscontravo).
Quel era il problema?
Il problema era Windows 😆. Nel mio file docker-compose.yml
avevo inserito l’istruzione:
command: "/bin/bash /app/entrypoint.sh"
In pratica, all’interno del file: entrypoint.sh
ho inserito una serie di comandi da eseguire all’avvio del container:
applicare le migration al database, avviare il server di debug, etc. Un comando su ogni riga del file.
A Windows però non piacciono i “carriage return” di Linux e quando mi ha scaricato il progetto da git mi ha sostituito
i ritorni accapo con la sua sintassi. Allo stesso tempo però il container che ho utilizzato è su base alpine
, che
a sua volta non capiva gli accapo di Windows.
Ho dovuto utilizzare Notepad++ per convertire il carattere di EOL (end of line) con la sintassi Linux. Avviando di nuovo i container questa volta non ho avuto problemi, tutto ha funzionato correttamente. Ci sarebbe un ultimissimo punto di cui vorrei parlare, ma non mi ci soffermerò troppo: le performace. Secondo me si sono rivelate pessime, ed i miei test si sono comunque svolti su una macchina con un buon hardware, quindi il problema sta tutto nel software. Penso che per il momento non possiamo aspettarci di meglio, nonostante WSL 2 abbia fatto molti passi in avanti, è pur sempre una virtualizzazione.
Morale della favola? Non usare Windows 10 per programmare! 😄
AP