Docker: impossibile eseguire RUN mkdir in un Dockerfile


116

Questo è un messaggio di errore che ricevo durante la creazione di un'immagine Docker:

Passaggio 18: ESEGUI mkdir / var / www / app && chown luqo33: www-data / var / www / app ---> In esecuzione in 7b5854406120 mkdir: impossibile creare la directory "/ var / www / app": nessun file o directory di questo tipo

Questo è un frammento di Dockerfile che causa l'errore:

FROM ubuntu:14.04
RUN groupadd -r luqo33 && useradd -r -g luqo33 luqo33

<installing nginx, fpm, php and a couple of other things>

RUN mkdir /var/www/app && chown luqo33:www-data /var/www/app
VOLUME /var/www/app
WORKDIR /var/www/app

"mkdir: non può creare la directory '/ var / www / app': nessun file o directory di questo tipo" suona così assurdo - ovviamente non esiste tale directory. Voglio crearlo. Cosa c'è che non va qui?


4
Niente di specifico per Docker qui, btw - avresti lo stesso problema in esecuzione mkdir /var/www/appsu un sistema che non ne aveva /var/wwwsenza.
Charles Duffy

Risposte:


178

Il problema è che /var/wwwneanche questo esiste e mkdirnon è ricorsivo per impostazione predefinita: si aspetta che esista la directory principale immediata.

Uso:

mkdir -p /var/www/app

... o installa un pacchetto che crea una /var/wwwprima di raggiungere questo punto nel tuo Dockerfile.


Grazie per averlo fatto notare. A proposito, quale pacchetto intendi creare /var/www?
luqo33

Questa è una domanda sulla confezione di Ubuntu 14.04; Non sono un esperto lì.
Charles Duffy

60

Quando crei sottodirectory sospese da una o più directory padre inesistente, devi passare il -pflag a mkdir... Aggiorna il tuo Dockerfile con

RUN mkdir -p ... 

L'ho provato ed è corretto.


17

Puoi anche usare semplicemente

WORKDIR /var/www/app

Creerà automaticamente le cartelle se non esistono.

Quindi torna alla directory in cui devi essere.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.