Docker: Неможливо виконати RUN mkdir в Dockerfile


116

Це повідомлення про помилку, яке я отримую під час створення зображення Docker:

Крок 18: RUN mkdir / var / www / app && chown luqo33: www-data / var / www / app ---> Запуск у 7b5854406120 mkdir: не вдається створити каталог '/ var / www / app': такого файлу чи каталогу немає

Це фрагмент Dockerfile, який викликає помилку:

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: не вдається створити каталог '/ var / www / app': Немає такого файлу чи каталогу" звучить настільки безглуздо - звичайно, такого каталогу немає. Я хочу його створити. Що тут не так?


4
Тут нічого конкретного Докера, btw - у вас була б та сама проблема, що працює mkdir /var/www/appв системі, яка не мала /var/wwwбез неї.
Чарльз Даффі

Відповіді:


178

Проблема в тому, що /var/wwwне існує і mkdirне є рекурсивною за замовчуванням - вона очікує існування безпосереднього батьківського каталогу.

Використання:

mkdir -p /var/www/app

... або встановити пакет, який створює /var/wwwдо досягнення цієї точки у вашому Dockerfile.


Дякуємо, що вказали на це. До речі, який пакет ви маєте на увазі, що це створило б /var/www?
luqo33

Це питання щодо упаковки Ubuntu 14.04; Я там не експерт.
Чарльз Даффі

60

Під час створення підкаталогів, які висіли з неіснуючих батьківських каталогів, потрібно передати -pпрапор на mkdir... Будь ласка, оновіть свій Dockerfile за допомогою

RUN mkdir -p ... 

Я перевірив це, і це правильно.


17

Ви також можете просто використовувати

WORKDIR /var/www/app

Він автоматично створить папки, якщо їх не існує.

Потім поверніться до каталогу, в якому ви повинні бути.


-1

Окрім попередніх випадків використання, ви також можете використовувати Docker Compose для створення каталогів у випадку, якщо ви хочете робити нові папки-манекени на docker-compose up:

    volumes:
  - .:/ftp/
  - /ftp/node_modules
  - /ftp/files

У чому справа з цією відповіддю? Гельцгейт також запізнився.
Пітер Мортенсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.