Docker: impossible d'exécuter RUN mkdir dans un Dockerfile

116

Ceci est un message d'erreur que je reçois lors de la création d'une image Docker:

Étape 18: RUN mkdir / var / www / app && chown luqo33: www-data / var / www / app ---> Exécution dans 7b5854406120 mkdir: impossible de créer le répertoire '/ var / www / app': aucun fichier ou répertoire de ce type

Il s'agit d'un fragment de Dockerfile qui provoque l'erreur:

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: impossible de créer le répertoire '/ var / www / app': aucun fichier ou répertoire de ce type» ne semble si insensé - bien sûr, il n’existe pas de tel répertoire. Je veux le créer. Quel est le problème ici?

luqo33
la source
4
Rien de spécifique à Docker ici, btw - vous auriez le même problème en cours mkdir /var/www/appd' exécution sur un système qui n'en avait pas /var/www.
Charles Duffy

Réponses:

178

Le problème est que cela /var/wwwn'existe pas non plus et mkdirn'est pas récursif par défaut - il s'attend à ce que le répertoire parent immédiat existe.

Utilisation:

mkdir -p /var/www/app

... ou installez un package qui crée un /var/wwwavant d'atteindre ce point dans votre Dockerfile.

Charles Duffy
la source
Merci de l'avoir signalé. Au fait, quel paquet voulez-vous dire que cela créerait /var/www?
luqo33
C'est une question sur l'empaquetage d'Ubuntu 14.04; Je ne suis pas un expert là-bas.
Charles Duffy
60

Lors de la création de sous-répertoires suspendus à un ou plusieurs répertoires parents non existants, vous devez passer l' -pindicateur à mkdir... Veuillez mettre à jour votre Dockerfile avec

RUN mkdir -p ... 

J'ai testé cela et c'est correct.

Kostikas
la source
17

Vous pouvez également utiliser simplement

WORKDIR /var/www/app

Il créera automatiquement les dossiers s'ils n'existent pas.

Revenez ensuite au répertoire dans lequel vous devez vous trouver.

Helzgate
la source
-1

Outre les cas d'utilisation précédents, vous pouvez également utiliser Docker Compose pour créer des répertoires au cas où vous souhaiteriez créer de nouveaux dossiers factices sur docker-compose up:

    volumes:
  - .:/ftp/
  - /ftp/node_modules
  - /ftp/files
Jasmeet Singh Chhabra
la source
Quel est le problème avec cette réponse? Helzgate était également en retard.
Peter Mortensen le