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?


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.


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.


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.


-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

Quel est le problème avec cette réponse? Helzgate était également en retard.
Peter Mortensen le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.