Docker: no se puede ejecutar RUN mkdir en un Dockerfile

116

Este es un mensaje de error que recibo al crear una imagen de Docker:

Paso 18: EJECUTE mkdir / var / www / app && chown luqo33: www-data / var / www / app ---> Ejecutando en 7b5854406120 mkdir: no se puede crear el directorio '/ var / www / app': No existe tal archivo o directorio

Este es un fragmento de Dockerfile que causa el error:

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: no se puede crear el directorio '/ var / www / app': no ​​hay tal archivo o directorio" suena tan absurdo - por supuesto que no existe tal directorio. Quiero crearlo. ¿Que esta mal aquí?

luqo33
fuente
4
Nada específico de Docker aquí, por cierto, tendría el mismo problema ejecutándose mkdir /var/www/appen un sistema que no tuviera un /var/wwwsin él.
Charles Duffy

Respuestas:

178

El problema es que /var/wwwtampoco existe y mkdirno es recursivo de forma predeterminada: espera que exista el directorio principal inmediato.

Utilizar:

mkdir -p /var/www/app

... o instale un paquete que cree un /var/wwwantes de llegar a este punto en su Dockerfile.

Charles Duffy
fuente
Gracias por señalar esto. Por cierto, ¿qué paquete quiere decir que crearía /var/www?
luqo33
Esa es una pregunta sobre el empaquetado de Ubuntu 14.04; No soy un experto ahí.
Charles Duffy
60

Al crear subdirectorios que cuelgan de un directorio principal no existente, debe pasar la -pbandera a mkdir... Actualice su Dockerfile con

RUN mkdir -p ... 

Probé esto y es correcto.

Kostikas
fuente
17

También puede simplemente usar

WORKDIR /var/www/app

Creará automáticamente las carpetas si no existen.

Luego, vuelva al directorio en el que debe estar.

Helzgate
fuente
-1

Además de los casos de uso anteriores, también puede utilizar Docker Compose para crear directorios en caso de que desee crear nuevas carpetas ficticias en docker-compose up:

    volumes:
  - .:/ftp/
  - /ftp/node_modules
  - /ftp/files
Jasmeet Singh Chhabra
fuente
¿Qué pasa con esta respuesta? Helzgate's también llegó tarde.
Peter Mortensen