Docker Desktop per Linux non è uguale a Docker Engine
Docker per Linux
Docker Desktop mi piace. Mi fornisce una GUI (interfaccia utente grafica) di facile utilizzo per gestire le mie immagini docker che utilizzo per varie attività per la creazione di software. Lo uso su Windows e ora lo userò su Linux poiché è disponibile per alcune delle distribuzioni più comuni. Indipendentemente dalla sua grandezza, non è la stessa cosa di Docker Engine in esecuzione direttamente sul “bare metal” (piuttosto che su una macchina virtuale, come Docker Desktop), e alcune di queste differenze mi hanno colto durante il test dei miei flussi di lavoro GitHub con nektos/act, che dipende da Motore Docker per funzionare.
Per essere onesti, dovrei sottolineare che questo è sicuramente un problema autoindotto. Il prerequisito del motore Docker è elencato proprio nel README per nektos/act e se avessi esaminato la documentazione probabilmente mi sarei risparmiato il problema. Tuttavia, nella mia indagine sul web per trovare soluzioni al problema che ho creato per me stesso, ho scoperto che altri avevano riscontrato problemi simili, da qui questo post.
IL CONTESTO
Ho scoperto il problema quando ho tentato di testare i miei flussi di lavoro GitHub localmente utilizzando nektos/act, uno strumento che ho utilizzato negli ultimi anni nel mio sviluppo software. Lo fa estraendo un'immagine Docker che simula il GitHub Runner ed esegue il flusso di lavoro in quel contenitore Docker. L'ho fatto alcune volte, quindi sono andato a uno dei miei vecchi progetti dove l'ho impostato e ho inserito il codice per farlo funzionare.
Dato che si trattava di una nuova installazione di Linux, non avevo ancora installato Docker. Quando ho cercato le istruzioni di installazione per Docker su Linux, sono stato accolto con questo annuncio:
Uso Docker per desktop su Windows da un po' di tempo e sono sempre felice di avere software che esiste nel mio ecosistema di ambiente di sviluppo Windows-Linux, quindi ho deciso di installare Docker per desktop come nuova installazione di Docker.
Dopo aver testato la mia nuova e splendente installazione Docker (per desktop) con la finestra mobile standard esegui hello-world, ero pronto per tornare a programmare!
O così pensavo...
IL PROBLEMA (E IL TRIAGING)
È qui che le cose sono andate di traverso e il problema è apparso. Ho eseguito act -j build per eseguire il mio lavoro di compilazione in un flusso di lavoro che so che ha funzionato in precedenza e sono stato accolto con il seguente messaggio di errore:
Cannot connect to Docker daemon. Is the docker daemon running?
Non quello che mi aspettavo, considerando che ho appena testato la mia nuova installazione di Docker, ma ho provato a tirare giù l'immagine da solo con il comando docker pull solo per assicurarmi che le cose non si rompessero e tutto funzionasse come previsto.
Con un po' di indagini sul web, mi sono imbattuto in altri che hanno segnalato lo stesso problema e hanno notato questo link in particolare:
You could check if /var/run actually contains docker.sock
Durante il controllo, ho scoperto che docker.sock in realtà NON era presente. L'ho associato immediatamente all'installazione di Docker per desktop, poiché era l'unica nuova variabile del mio precedente ambiente di sviluppo.
LA CAUSA ALLA RADICE (PROBABILMENTE)
Questa è una parte in cui spreco il mio tempo cercando di capire perché Docker per desktop non ha installato docker.sock. Piuttosto che capire come installare i componenti docker che mancano.
Anche se non sono un esperto di Docker, la mia comprensione è che Docker per desktop esegue Docker all'interno di una VM anziché sul sistema stesso, a differenza di Docker Engine. Infatti, puoi vedere un contesto Docker separato quando elenchi i contesti.
Va notato che è stato elencato il contesto predefinito per Docker, anche se non avevo ancora installato Docker Engine. Questo mi ha portato a credere che qualcosa che ho installato fosse configurato in modo errato, ma in realtà era il fatto che non avevo installato il software di cui avevo bisogno.
LA SOLUZIONE / TL;DR;
Per quanto tecnico lo facessi sembrare, il vero problema era che mi mancava il software. In particolare mi mancava "docker" sulla mia macchina Linux, anche se ho installato Docker per desktop. ??
Bene, se il problema è che mi manca il software, allora la soluzione deve essere installare il software. Quel software è Docker Engine, che imposta l'API Docker direttamente sulla macchina anziché tramite una VM come Docker per desktop (per quanto ne so).
In conclusione, installa le dipendenze del software gli strumenti Se stai eseguendo una distribuzione Linux, per quanto Docker per desktop sia eccezionale, potresti comunque voler installare Docker Engine. Puoi sempre cambiare contesto su dove eseguire i tuoi comandi docker con il comando docker context set, ma vale la pena ricontrollare per assicurarsi che lo strumento che stai utilizzando supporti Docker per desktop su piattaforme Linux.
David Wesst